繁体   English   中英

编译器错误消耗Web API调用

[英]Compiler Error Consuming Web API Call

我需要对旧版ASP.Net Web窗体应用程序实施webapi调用。
我知道并非所有使用方法都需要此方法,但是我将其包含在页面上的其他方法上,这其中一个正在引起问题。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;

private string GetToken(string Username, string IpAddress)
    {
        string result = string.Empty;

        HttpClient client = new HttpClient();

        client.BaseAddress = new Uri(SSOApiUri);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync("api/yourcustomobjects").Result;
        if (response.IsSuccessStatusCode)
        {
            ***var data = await response.Content.ReadAsStringAsync();***
            var token = JsonConvert.DeserializeObject<GetSSOTokenResponse>(data);
            result = token.Token;
        }

        return result;
    }

当我尝试编译我的应用程序时,在强调行出现以下错误:

错误19'await'运算符只能在异步方法中使用。 考虑使用'async'修饰符标记此方法,并将其返回类型更改为'Task <string>'。

我正在尝试实现一种与该问题中发现的解决方案相似的解决方案,但失败了。 我需要调用WebAPI方法,并将结果的一部分作为字符串返回...而不是Task <String>

该错误很简单。 您必须具有async方法才能使用await关键字。 您的返回值将由编译器自动包装在Task中。 请注意, .Result也可以更改为await。 这是有关async / await关键字的Microsoft文档

private async Task<string> GetToken(string Username, string IpAddress)
{
   string result = string.Empty;

    HttpClient client = new HttpClient();

    client.BaseAddress = new Uri(SSOApiUri);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = await client.GetAsync("api/yourcustomobjects");
    if (response.IsSuccessStatusCode)
    {
        var data = await response.Content.ReadAsStringAsync();
        var token = JsonConvert.DeserializeObject<GetSSOTokenResponse>(data);
        result = token.Token;
    }

    return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM