【问题标题】:Receiving null to Post method when request content is over a certain size当请求内容超过一定大小时接收 null 到 Post 方法
【发布时间】:2018-06-13 14:18:49
【问题描述】:

首先触发它的请求内容大小是 632 字节,所以我不相信它与 maxRequestLength 参数有关。我试过增加这个,但没有帮助。请求内容可通过 ReadAsStreamAsync 获得,因此不会被 IIS 阻止。

我有一个带有 Post 方法的控制器,它接受一个类对象。这总是在我的开发机器上工作,并且大部分时间它在我们的 IIS 下的 QA 服务器上工作。好像——

[RoutePrefix("api/message")]
public class MessageController : ApiController
{
    [Route("send")
    public async Task<SendMessageResponse> PostSend([FromBody] SendMessageRequest request)
    {
        ...

SendMessageRequest 看起来像 -

public class SendMessageRequest
{
    public string[] sendTo { get; set; }
    public string subject { get; set; }
    public string body { get; set; }
}

但是当请求内容超过 632 个字符时,PostSend 接收 null 作为请求参数。可以使用 Newtonsoft.JSON 手动拉取请求流和序列化。

有什么想法吗?

谢谢, 赫克托

*示例请求内容

{
    "subject" : "Test Message",
    "sendTo" : [ "hector@employer.com" ],
    "body" : "...Long String..."
}

更改主题或正文以使请求内容超过 632 字节将导致将 null 传递给 PostSend

【问题讨论】:

  • 您能否发布示例代码以说明您如何调用 API 方法?
  • 如果您说它在您的环境和 QA 上也有效,则可能是配置错误。我会使用 Fiddler 来跟踪原始请求和响应,看看是否会产生任何结果
  • @JuanR - 添加了一个示例请求内容。反序列化由 ASP.NET 处理。我可以通过发送相同的消息并增加主题或正文以使其超过字符限制来复制。
  • @AndreiU - 两者的 Web.Config 相同。它仅在 IIS 下失败,因此我无法运行 fiddler,但我已经记录了完整的请求内容,对于在正文或主题中添加了一些额外字符的其他相同请求,我可以可靠地使其失败。
  • 能否贴出实际调用API的代码?你在用 JS 和 JQuery 吗?

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


【解决方案1】:

事实证明,在生产和 QA 中,我们有一个基于节点的服务器来代理请求。这会以分块形式传递请求。

WebApi v2.1 中似乎存在一个错误,按照 https://forums.asp.net/t/1978292.aspx 处理分块请求。

解决方案是在设置 request.Content.Headers.ContentLength = null 的反序列化器之前向管道中添加一些内容。

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
    if (request.Headers.TransferEncodingChunked.HasValue 
        && request.Headers.TransferEncodingChunked.Value)
    {
        request.Content.Headers.ContentLength = null;
    }
    return base.SendAsync(request, cancellationToken);
}

【讨论】:

    猜你喜欢
    • 2022-06-25
    • 2016-03-01
    • 2013-05-15
    • 2018-12-26
    • 2011-07-27
    • 2013-08-17
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多