【问题标题】:MVC GetAsync not working and doesn't throw any exceptionMVC GetAsync 不工作并且不抛出任何异常
【发布时间】:2014-11-14 20:51:09
【问题描述】:

我有这样的代码:

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 ?

【问题讨论】:

  • 您是否尝试在调用 GetAsync 后的 catch 和语句中设置断点?你用的是哪个版本的VS?
  • 你从哪里打这个电话?控制台应用程序?

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


【解决方案1】:

您可能没有等待异步操作完成。这就是为什么它到达aysnc 调用,该方法返回代表操作的任务,然后应用程序结束。

您需要使用await getToken()await 任务getToken 返回。如果从main方法调用getToken,不能是async,需要使用Task.Wait同步等待:

static void Main()
{
    getToken().Wait();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2013-08-07
    相关资源
    最近更新 更多