簡體   English   中英

“不正確的內容類型:”異常拋出angular mvc 6應用程序

[英]“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)
    { }
}

C#viewmodel

public class LoginViewModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

HTML / JS

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM