[英]ASP.NET Core - weird behavior with [FromBody]
我有一個 ASP.NET Core web 應用程序可以正常工作,當使用這個 controller 實現時:
[HttpPost]
public ActionResult SetAssignment()
{
string b = "";
using (StreamReader rdr = new StreamReader(Request.Body)) b = rdr.ReadToEnd();
Assignment asg = JsonConvert.DeserializeObject<Assignment>(b);
// asg is valid here
// ... do other stuff ...
}
但是在使用這個實現時它不起作用:
[HttpPost]
public ActionResult SetAssignment([FromBody] Assignment asg)
{
// asg is always NULL here
// ... do other stuff...
}
從理論上講,這些實現應該是相同的(盡管第二個會更優雅),不是嗎?
我好像錯過了什么……
調用此方法的方式如下所示,順便說一句:
function asgupdate() {
var asp = {};
asp.AssignmentId = $("#asp_idx").val();
...
$.ajax({
type: "POST",
url: "/Project/SetAssignment",
data: JSON.stringify(asp),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
...
}
});
};
JSON 請求確實由瀏覽器發送,並且看起來正確(afaict)。
分配 model 如下所示:
public class Assignment
{
[Key]
public int AssignmentId { get; set; }
[Required]
public int CrewMemberId { get; set; }
[Required]
public int ProjectId { get; set; }
[DisplayName("Function")]
public string Function { get; set; } = "";
public string? Account { get; set; }
public float Rate { get; set; } = 0;
public float PrepWeeks { get; set; } = 0;
public float ShootWeeks { get; set; } = 0;
public float WrapWeeks { get; set; } = 0;
public float PostWeeks { get; set; } = 0;
public DateTime Created { get; set; } = DateTime.UtcNow;
public DateTime Updated { get; set; } = DateTime.UtcNow;
public AssignmentTypes? AssignmentType { get; set; } = AdditionalClasses.AssignmentTypes.SALARYNORMAL;
public virtual CrewMember CrewMember { get; set; }
public virtual Project? Project { get; set; }
}
好的,解決方案是幾件事的混合,感謝@dbc 為我指明了正確的方向......
我錯誤地認為自動 JSON 轉換與 Newtonsoft.JSON 相同,這絕對不是。
由於 System.Text.Json 在解釋內容方面更加嚴格,我不得不添加一些選項:
builder.Services.AddControllers().AddJsonOptions(x =>
{
x.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString;
x.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.