【发布时间】: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