Я боролся с этим в течение двух дней. Это так обескураживает.ApiController принимает json в POST на сервере тестирования localhost, но не на производственном сервере. Зачем?
Это относительно простой контроллер апи:
[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);
}
}
Все отлично работает при отладке на локальном хосте: хххх. Модель действительна, и новая запись может быть вставлена в базу данных.
Но когда он публикуется на сервере, я всегда получаю 400: Bad Request
. Я пробовал использовать другой браузер, и я уверен, что это проблема на стороне сервера.
Тогда я попытался увеличить размер запроса, как указано в некоторых других сообщениях. Но он все еще не может работать. Я не смог установить удаленный отладочный инструмент на этом сервере.
Кто-нибудь видел эту проблему раньше? Это что-то с IIS 6?
Я очень ценю любую помощь. Спасибо!
Update:
Оказывается действие апи POST никогда не ударил, прежде чем выбрасывается ошибка Bad Request
. Но почему это нормально в локальной отладке?
Update:
Я добавил эти строки кода в 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)"
Wow! Является ли это чем-то связанным с IIS 6? Кто может сказать мне, что такое StackTrace? Благодарю.
Теперь я узнаю в here, что это get_CurrentNotification
, что требует трубопровода вещь, которая существует только в IIS7. Но кто может сообщить нам, где я звонил по телефону HttpContext.CurrentNotification
?
Спасибо за помощь. Но где место для 'config.IncludeErrorDetailPolicy'. В Global.asax? – Blaise
На самом деле я обнаружил, что действие POST никогда не попадалось. Почему пост может достигнуть действия в localhost: xxx, но не на производственном сервере? – Blaise
есть. вы можете настроить IncludeErrorDetailPolicy в свой global.asax или может быть в 'App_Start \ WebApiConfig.cs' –