Мы переносим сайт с ASP MVC. Net Framework на. Net Core. Во многих случаях мы делаем ajax POST-запросы со страницы к контроллеру:
js:
var request = { Name: "bar" };
$.ajax({
url: "/Home/foo",
type: "POST",
data: JSON.stringify(request),
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function (response) {
console.log();
}
});
c# Контроллер:
[HttpPost]
public async Task<JsonResult> foo(FooRequest request)
{
//request.Name is empty
return Json(new { msg = "Success" });
}
c# Модель:
public class FooRequest
{
public string Name { get; set; }
}
Это все работает в. Net Framework, но не работает в Core , если все свойства полученного объекта равны нулю .
Я пытался использовать оба AddJsonOptions
:
services.AddControllersWithViews()
.AddJsonOptions(option =>
{
option.JsonSerializerOptions.PropertyNamingPolicy = null;
option.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
... и AddNewtonsoftJson
:
services.AddControllersWithViews()
.AddNewtonsoftJson(option =>
{
option.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
});
... но ни один из них не работает .
Что мне нужно сделать, чтобы получить такое же поведение. Net Ядро, как и я. Net Framework?
Обновление
Я получаю то же поведение при вызове endoint из Postman (request.Name равно null):
POST /home/foo HTTP/1.1
Host: localhost:44393
Content-Type: application/json
{ "Name": "bar" }
Я также пытался сериализовать запрос:
var request = { Name: "bar" };
$.ajax({
url: "/Home/foo",
type: "POST",
data: request,
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function (response) {
console.log();
}
});
... но с тем же результат