代码之家  ›  专栏  ›  技术社区  ›  anaximander

ASP.NET MVC API库

  •  4
  • anaximander  · 技术社区  · 6 年前

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

    在浏览器中加载索引页时出现错误,说我需要用 <%@ Page Async="true" %> 或者返回任务。但是控制器方法不允许我使用 public async Task MakeCall(string url) 找不到所述类型或命名空间任务。

    库类:

    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);
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Nkosi    6 年前

    避免 async void 火和忘记的方法。确保代码始终异步,确保包含必要的名称空间,如 using 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);
    
        }
    }