ASP.NET Основной ПОСТ в MVC

#asp.net-core-mvc

#asp.net-core-mvc

Вопрос:

Я пытаюсь выполнить простой POST-запрос от клиента к контроллеру MVC в моем ASP.NET Основное приложение. Проблема в том, что, хотя я правильно настроил вызов ajax (я думаю), полезная нагрузка всегда отправляется в виде URL-адреса формы в кодировке, и моя модель на сервере заканчивается нулем. Вот моя настройка:

Определение действия контроллера:

 [HttpPost]
public async Task<EmailResponse> SendEmail([FromBody] EmailModel model)
{
EmailResponse response = new EmailResponse();

...

return response;
}  

Модель:

 public class EmailModel
{
[JsonProperty("fistName")]
public string FirstName { get; set; }
[JsonProperty("lastName")]
public string LastName { get; set; }
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("company")]
public string Company { get; set; }
[JsonProperty("message")]
public string Message { get; set; }
}  

Вызов ajax клиента:

 $.ajax({
  type: "POST",
  url: "/Home/SendEmail",
  contentType: 'application/json; charset=utf-8',
  data: model
}).done(function (result) {
   ...
}).error(function(error) {
   ...
});  

Вот мой запрос:

 POST /Home/SendEmail HTTP/1.1
Host: localhost:5000
Connection: keep-alive
Content-Length: 77
Pragma: no-cache
Cache-Control: no-cache
Accept: */*
Origin: http://localhost:5000
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: http://localhost:5000/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: _ga=GA1.1.116706601.1460641478

firstName=Joeamp;lastName=Doeamp;email=test@test.comamp;company=Acme, Incamp;message=  

Обратите внимание на полезную нагрузку в конце запроса. Он не в формате JSON, хотя я передаю обычный объект JS и указываю ContentType как application / json. Я предполагаю, что именно поэтому моя модель всегда имеет значение null на сервере.

Я смотрю на это уже пару часов и не могу понять, в чем проблема. Мы высоко ценим любой вклад.

Спасибо.

Ответ №1:

Ваша модель не сериализована в json. Объект сериализуется в пары тип носителя — ключ-значение по умолчанию — то, что известно как «application / x-www-form-encoded».

Попробуйте применить JSON

 $.ajax({
  type: "POST",
  url: "/Home/SendEmail",
  contentType: 'application/json; charset=utf-8',
  data: JSON.stringify(model) //notice the JSON.stringify call
}).done(function (result) {
    ...
}).error(function(error) {
    ...
});
  

Комментарии:

1. хорошо, мы приближаемся. Теперь модель проходит, но все свойства равны нулю. Я думаю, мне нужно проверить определение полей. У меня действительно установлено свойство JsonProperty для каждого поля, но, возможно, там чего-то не хватает. Я обновил свой вопрос, чтобы включить определение модели

2. Спасибо. Это сделало это.

3. AFAIK, вы можете удалить атрибуты JsonProperty как asp.net ядро совместимо с именованием camelCase «из коробки». wildermuth.com/2016/06/27 /…