2017-06-01 49 views
1

我正在設計一個簡單的Web API服務,它接受html表單上的輸入,將這些輸入轉換爲json,然後將其發送到一個Web API。我在Visual Studio 2017年在這裏與ASP.NET的Web API的工作是我的一些代碼,以幫助我更好地解釋:在ASP.NET Web API中發送Ajax POST請求時出現'Error 405 - Method not Allowed'

這是我的控制器方法我打電話:

[HttpPost] 
public AssessModel PostAssessment ([FromBody] AssessModel assess) 
{ 
    //Do something 
    return assess; 
} 

這是模型(簡體),我使用:

public class AssessModel 
{ 
    public Guid capitalassetassessmentid { get; set; } 
    public string ownerid { get; set; } 

    /*... Many more properties of int, bool, ect here ...*/ 

    public string name { get; set; } 
    public string building { get; set; } 
} 

最後,這是Ajax調用,我用我的腳本:

$("form#my-form").submit(function (e) { 
    //First line here takes all fields and puts them in an array 
    var formArray = $(this).serializeArray(); 
    //Second line takes that array and puts it into json format. 
    var jsonObj = JSON.stringify(formArray); 

    //Send request 
    $.ajax({ 
     type: "POST", 
     url: "api/assessment/PostAssessment", 
     data: jsonObj, 
     contentType: "application/json", 
     dataType: "json", 
     success: function (jsonObj) { 
      $("#results").html(jsonObj.d); 
     } 
    }); 
}); 

所以我在提交表單時調用了這個ajax請求。這個Ajax請求應該把我的json作爲一個字符串發送給控制器方法,但是當我按下提交時,我得到一個錯誤405 - 方法不允許。我不確定爲什麼我不允許使用標記HttpPost將POST動詞發送到控制器方法。

另外值得一提的是,我的表單標籤是這樣的:

<form id="my-form" class="form" method="POST">

有什麼想法?我需要澄清什麼嗎?讓我知道。

+2

我會仔細檢查你的路由。你確定端點是API /評估/後評估嗎?這可能只是api /評估。 – skalpin

+0

我剛剛檢查了這一點,它沒有解決問題。雖然好想。 –

+0

嘗試將鏈接中的代碼添加到您的web api web.config https://enable-cors.org/server_iis7.html。不知道這是你的問題,但如果它解決了問題,我可以給你一個詳細的答案。 – RandomUs1r

回答

0

嘗試

var data = {}; 
var formArray = $('form#my-form').serializeArray(); 
for(var i in array) 
{ 
    data[formArray[i].name] = formArray[i].value; 
} 
var jsonObj = JSON.stringify(data); 
+0

我改變了我的代碼,只是簡單地在你指出的地方添加了「[0]」,並沒有解決問題。我懷疑這個問題與這個領域有關。也許沒有提供與AssessModel類匹配的json數據? –

+0

是的,如果您的json與assessmodel類不匹配,默認模型聯編程序將無法構建您的對象。 – skalpin

+0

所以我的json需要有對與我的AssessModel類的屬性完全匹配,否則我會得到這個錯誤?因爲如果是這種情況,那麼我們就根本原因有一個開放和關閉的案例。 –

相關問題