【发布时间】:2020-03-16 18:53:59
【问题描述】:
我们正在将一个站点从 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 Core 中获得与在 .Net Framework 中相同的行为?
更新
我从 Postman 调用 endoint 得到相同的行为(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();
}
});
...但结果相同
【问题讨论】:
-
应该更清楚了,但是接收到的对象的所有属性都是空的。
-
您检查过您发布的内容吗?你为什么要在你发布的对象上调用 JSON.stringify?
-
因为这是让它在 .Net Framework 中工作的唯一方法。我很乐意改变这一点,但我使用 data:request 遇到了同样的问题,
标签: c# asp.net-core