C# ASP.NET MVC API库

C# ASP.NET MVC API库,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,使用类库从web API获取数据,并在同一解决方案中的MVC项目中引用它 在浏览器中加载索引页时不断出现错误,表示我需要用标记页面或返回任务。但是控制器方法不允许我使用公共异步任务MakeCall(stringurl)表示找不到类型或命名空间任务 图书馆类别: public class GetObject { public async Task GetRequest(string url) { using (HttpClient client = new Http

使用类库从web API获取数据,并在同一解决方案中的MVC项目中引用它

在浏览器中加载索引页时不断出现错误,表示我需要用
标记页面或返回任务。但是控制器方法不允许我使用
公共异步任务MakeCall(stringurl)
表示找不到类型或命名空间任务

图书馆类别:

public class GetObject
{
    public async Task GetRequest(string url)
    {
        using (HttpClient client = new HttpClient())
        using (HttpResponseMessage response = await client.GetAsync(url))
        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync();
            HttpContentHeaders headers = content.Headers;
        }
    }
}
在我使用的控制器中:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        MakeCall("http://api.openweathermap.org/data/2.5/weather?q=London&APPID=[APIKEY]");
        return View();
    }

    public async void MakeCall(string url)
    {
        GetObject newCall = new GetObject();
        await newCall.GetRequest(url);
    }
}

避免
async void
fire和forget方法。通过确保使用System.Threading.Tasks包含必要的名称空间(如
),使代码始终保持异步

比如说

//...other using
using System.Threading.Tasks;

public class HomeController : Controller {
    public async Task<ActionResult> Index() {
        await MakeCall("http://api.openweathermap.org/data/2.5/weather?q=London&APPID=[APIKEY]");
        return View();
    }

    public async Task MakeCall(string url) {
        GetObject newCall = new GetObject();
        await newCall.GetRequest(url);

    }
}
/…其他使用
使用System.Threading.Tasks;
公共类HomeController:控制器{
公共异步任务索引(){
等待MakeCall(“http://api.openweathermap.org/data/2.5/weather?q=London&APPID=[APIKEY]”;
返回视图();
}
公共异步任务MakeCall(字符串url){
GetObject newCall=新建GetObject();
等待newCall.GetRequest(url);
}
}

永远不要从异步方法返回任务返回void。