"Неверный тип содержимого:" исключение вызывает angular приложение mvc 6
Я разрабатываю приложение, использующее asp.net, mvc6 и angularjs в моей службе angular. Когда я делаю запрос к методу действия, я не получаю никаких переданных данных.
Когда я проверил запрос, я мог увидеть исключение, вызванное:
- Form '((Microsoft.AspNet.Http.Internal.DefaultHttpRequest) this.Request).Form' бросил исключение типа 'System.InvalidOperationException' Microsoft.AspNet.Http.IFormCollection {System.InvalidOperationException}
сообщение об ошибке "Incorrect Content-Type:application/json;charset=UTF-8"
my angular сервис
return $http({ method: 'POST', url: 'home/createEvent', eventDetails: event })
.success(function(data, status, headers, config) {
return data;
})
.catch(function(data, status, headers, config) {
console.log(data);
});
на моем контроллере
[HttpPost]
public IActionResult CreateEvent([FromBody]Event eventDetails)
{
return Json(new {dsd=""},
new JsonSerializerSettings {ContractResolver = new CamelCasePropertyNamesContractResolver()});
}
Ответы
Ответ 1
Надеемся, что следующие примеры помогут вам.
Попробуйте украсить ваш контроллер
[Produces("application/json")]
[Route("api/[controller]")]
Поскольку вы не укажете свое имя контроллера, я дам вам фиктивный полный рабочий пример
контроллер
[Produces("application/json")]
[Route("api/[controller]")]
public class DashBoardLayoutApi : Controller
{
public DashBoardLayoutApi()
{ }
[HttpPost]
public void Post([FromBody] LoginViewModel data)
{ }
}
С# viewmodel
public class LoginViewModel
{
public string Email { get; set; }
public string Password { get; set; }
}
HTML/JS
<script>
var data = {
Email: 'Test',
Password: 'Test',
RememberMe: true
};
$("#test").click(function() {
$.ajax({
url: '/api/DashBoardLayoutApi',
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
});
}
</script>
<button id="test"> Save Layout</button>
Результаты
![введите описание изображения здесь]()
Ответ 2
Принятый ответ не помог мне. Для меня решение заключалось в том, чтобы добавить заголовок к вызову $http:
$http({
url: "/install",
method: "POST",
data: data,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
})
.success(...);
Ответ 3
Скрытый ответ велик. Однако у меня все еще была пустая модель в контроллере С#, даже после того, как я применил скрытый подход в своем приложении. После небольшого поиска я обнаружил, что проблема была в неправильной клиентской модели, созданной в JS-коде, которую нельзя десериализовать на сервере (null не может быть преобразован в тип Guid).
По какой-то причине модельное связующее не бросает исключений в таких случаях:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding
Когда параметр привязан, привязка к модели перестает искать значения с этим именем, и она переходит к привязке следующего параметра. Если привязка не выполняется, MVC не выдает ошибку. Вы можете запрашивать ошибки состояния модели, проверяя свойство ModelState.IsValid.
Итак, проверьте свойство ModelState.IsValid в контроллере С#, чтобы убедиться, что вы прошли действительную модель и, возможно, рассмотрите возможность использования настраиваемого связующего объекта, чтобы поймать ошибки привязки модели и зарегистрировать их.
Ответ 4
В моем случае добавление [Produces("application/json")]
ничего не сделало, но добавление [FromBody]
к параметру - вот что [FromBody]
!