我正在设计一个简单的Web API服务,它接受html表单上的输入,将这些输入转换为json,然后将其发送到Web API。我正在使用Visual Studio 2017中的ASP.NET Web API。以下是我的一些代码,可以帮助我更好地解释:
这是我正在调用的控制器方法:
[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 - 方法不允许。我不确定为什么我不允许将POST动词发送到带有标签HttpPost的控制器方法。
还值得一提的是我的表格标签是这样的:
<form id="my-form" class="form" method="POST">
有什么想法?我需要澄清什么吗?让我知道。
答案 0 :(得分: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);