我已经为此苦苦挣扎了两天。这太令人沮丧了。
是一个比较简单的api控制器:
[HttpPost]
public HttpResponseMessage Save(ReportCreateInputModel model)
{
if (ModelState.IsValid)
{
_service.AddReport(model);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, model);
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
在 localhost:xxxx 上调试时一切正常。模型有效,可以将新记录插入数据库。
但是当它发布到服务器时,我总是得到一个400: Bad Request
. 我试过不同的浏览器,我很确定这是服务器端的问题。
然后我尝试增加其他帖子中提到的请求大小。但它仍然无法工作。我无法在该服务器上安装远程调试工具。
有没有人见过这个问题?它与 IIS 6 有关吗?
我非常感谢任何帮助。谢谢!
更新:
事实证明,在Bad Request
抛出错误之前从未命中 api POST 操作。但是为什么在本地调试中很好呢?
更新:
我在 WebApiConfig.cs 中添加了这些代码行
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.Objects;
json.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
现在在jqXHR.responseText
我有一个例外
"$id":"3","Message":"An error has occurred.",
"ExceptionMessage":"This operation requires IIS integrated pipeline mode.",
"ExceptionType":"System.PlatformNotSupportedException",
"StackTrace":" at System.Web.HttpContext.get_CurrentNotification()
at System.Web.HttpContextWrapper.get_CurrentNotification()
at GetCurrentNotification(Object )
at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)"
哇!这与我正在使用的 IIS 6 有关吗?谁能告诉我 StackTrace 是什么?谢谢。
现在我在这里发现它get_CurrentNotification
需要管道的东西,它只存在于 IIS7 中。但是谁能告诉我们我在哪里打过电话HttpContext.CurrentNotification
?