[英]“Incorrect Content-Type: ” exception throws angular mvc 6 application
我正在使用asp.net,mvc6和angularjs在我的角度服務上開發一個應用程序。 當我向動作方法發出請求時,我沒有傳遞數據。 當我檢查了請求時,我可以看到由以下原因引起的異常:
- 表單'((Microsoft.AspNet.Http.Internal.DefaultHttpRequest)this.Request).Form'拋出類型'System.InvalidOperationException'的異常'Microsoft.AspNet.Http.IFormCollection {System.InvalidOperationException}
異常消息"Incorrect Content-Type:application/json;charset=UTF-8"
我的角度服務
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()});
}
希望以下示例可以幫助您。
嘗試用你的控制器裝飾
[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)
{ }
}
public class LoginViewModel
{
public string Email { get; set; }
public string Password { get; set; }
}
<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>
接受的答案對我不起作用。 對我來說,解決方案是在$ http調用中添加一個標頭:
$http({
url: "/install",
method: "POST",
data: data,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
})
.success(...);
隱藏的答案很棒。 但是,即使我在我的應用程序中實現了隱藏的方法,我仍然在C#控制器中有空模型。 在挖掘了一下后,我發現問題出在JS代碼中創建的不正確的客戶端模型中,無法在服務器上反序列化(null無法轉換為類型Guid)。
出於某種原因,模型綁定器在這種情況下不會拋出異常: https : //docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding
綁定參數時,模型綁定將停止查找具有該名稱的值,並繼續綁定下一個參數。 如果綁定失敗,MVC不會拋出錯誤。 您可以通過檢查ModelState.IsValid屬性來查詢模型狀態錯誤。
因此,檢查C#控制器中的ModelState.IsValid屬性以確保傳遞有效模型,並考慮使用自定義模型綁定器來捕獲模型綁定錯誤並記錄它們。
在我的例子中,添加[Produces("application/json")]
沒有做任何事情,但是將[FromBody]
屬性添加到參數是什么訣竅!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.