MVC GetAsync不起作用,不会抛出任何异常

时间:2014-09-20 10:32:17

标签: c# asp.net-mvc async-await httpclient asp.net-web-api

我有这样的代码:

public async Task<string> getToken()
        {
            string uri = "http://localhost/api/getToken";

            HttpClient client = new HttpClient();
            //client.BaseAddress = new Uri(uri);

            string token = "asfd";
            string baseId = "asfasdf";
            string appVersion = "afsadf";

            string content = "";

            HttpResponseMessage response = null;
            try
            {
                string url = string.Format("{0}?token='{1}'&baseId='{2}'&appVersion='{3}'", uri, token, baseId, appVersion);
                //client.BaseAddress = new Uri(url);
                response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);

                response.EnsureSuccessStatusCode();

                content = await response.Content.ReadAsStringAsync();

            }
            catch (Exception ex)
            {

            }


            return content;
        }

当我到达线路时GetAsync被称为VS关闭调试模式并且不会抛出任何异常。 在服务器上,我在控制器(mvc web api)中的操作中有断点,但未到达。 但是当我复制url并将其传递给浏览器时,控制器中的操作被调用。 当我更改我的url以获取其他不正确的url时,GetAsync抛出异常,这是在catch中捕获的。 我的应用程序在.net framework 4.5,控制台应用程序中。 也许我必须添加任何DLL?

1 个答案:

答案 0 :(得分:1)

您可能不等待异步操作完成。这就是它进入aysnc调用的原因,该方法返回表示操作的任务,然后应用程序结束。

您需要await使用getToken返回任务await getToken()。如果您使用getToken方法拨打mainasync方法不能Task.Wait,则需要使用static void Main() { getToken().Wait(); } 同步等待:

{{1}}