来自PostAsync的内部服务器错误

时间:2018-07-29 19:34:13

标签: c# asp.net-mvc asp.net-web-api asp.net-core

我有下面的方法可以将数据发布到URL

    public async Task<IActionResult> PostAsync(string method, string data, bool isJson = true, long key = 0)
    {
        IActionResult result;
        try
        {
            var proxyUrl = await EstablishProxyUrlAsync(method, key).ConfigureAwait(false);
            var content = isJson ? new StringContent(data, Encoding.UTF8, "application/json") : new StringContent(data);

            var response = await this._httpClient.PostAsync(proxyUrl, content).ConfigureAwait(false);
            result = await ProcessResponseAsync(response).ConfigureAwait(false);
        }
        catch (Exception e)
        {
            Log.Error(e, this.GetType().Name + ": Error in PostAsync");
            throw;
        }

        return result;
    }

如您所见,我 am 设置ContentType,有关处理StringContent的大量文章都谈到了使用此方法。

但是,我只是把它找回来

{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Date: Sun, 29 Jul 2018 19:19:35 GMT
  Server: Kestrel
  Content-Length: 0
}}

就发现问题所在而言,这显然是毫无用处的响应

被调用的方法在下面

[HttpPost]
[ActionName("Add")]
public async Task<IActionResult> AddAsync(StringContent content)
{
    var myJson= await content.ReadAsStringAsync().ConfigureAwait(false);
    var object= JsonConvert.DeserializeObject<MyObject>(myJson);
    var result = await _service.AddAsync(object).ConfigureAwait(false);

    return result;
}

如您所见,我包含了HttpPost

有人知道是什么原因造成的吗?

我正在使用服务结构,并且此URL在分区上是一个URL,但是我认为这不是问题,因为此路由在其他区域也有效

保罗

1 个答案:

答案 0 :(得分:3)

被调用的方法应该进行重构,以遵循正确的语法,并将模型传递给操作,并让模型绑定程序用传入的数据填充它。

[HttpPost]
[ActionName("Add")]
public async Task<IActionResult> AddAsync([FromBody] MyObject model) {
    var result = await _service.AddAsync(model);
    return result;
}

假设_service.AddAsync(model);在等待时返回IActionResult

引用Model Binding in ASP.NET Core