ASP NET Core中PostAsync异常的自定义输入格式

时间:2018-04-25 17:11:29

标签: asp.net-core

我有一个奇怪的问题,我不知道为什么会出现问题:

在客户端,我有这段代码:

 HttpResponseMessage response = await _httpClient.PostAsync("http://127.0.0.1:5544/api/Blablabla", new StringContent("test"));

在服务器上,我实现了一个具有此

的自定义InputFormatter
 public async override Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
    {
        var request = context.HttpContext.Request;

        try
        {
            using (var reader = new StreamReader(request.Body))
            {
                var content = await reader.ReadToEndAsync().ConfigureAwait(false);
                return await InputFormatterResult.SuccessAsync(content).ConfigureAwait(false);
            }
        }
        catch (Exception e)
        {
            return await InputFormatterResult.FailureAsync();
        }            
    }

如果我试试这个,就会触发服务器的catch异常,给我一个例外:

远程主机强行关闭现有连接

但是.....

如果在客户端我使PostAsync“同步”执行此操作:

HttpResponseMessage response = _httpClient.PostAsync("http://127.0.0.1:5544/api/Blablabla", new StringContent("test")).Result;

一切正常。

问题是什么???

1 个答案:

答案 0 :(得分:0)

好的,我修好了......

问题是,正如你可以想象的那样,调用postasync的函数是异步的,但之前的函数不是,而且我没有为那个函数创建.Wait()。

与asp net core无关,只是来自同步代码的异步代码问题。