我想要一个从 HTML 文件调用的服务。例如像这样:
// POST api/values
public ActionResult Post([FromBody]Models.FormEntry[] composit)
{
//Some Code here ...
return new HttpStatusCodeResult(200);
}
然后我从一个 HTML 文件中调用这个服务,如下所示:
<script>
function onSubmit(form) {
var data = $(form).serializeArray();
$.ajax({
type: "POST",
url: "http://localhost:45407/api/values",
data: JSON.stringify(data),
dataType: "text",
//contentType: "application/json",
success: function () { alert('YES!'); },
error: function () { alert('NO NO NO!'); }});
}
</script>
它的行为正常,但不向服务发送任何内容,并且composit
参数给出 null 值。当我取消注释时,contentType: "application/json"
它会出错并且服务不会调用。我通过邮递员(Chrome 扩展程序)对其进行了测试,它运行良好。邮递员向我推荐了这段代码:
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost:45407/api/values",
"method": "POST",
"headers": {
"content-type": "application/json",
"cache-control": "no-cache",
"postman-token": "e1b9721b-2925-c413-69e0-b1b21de239cb"
},
"processData": false,
"data": data
}
$.ajax(settings).done(function (response) {
console.log(response);
});
我用我的代码替换了上面的代码,但服务调用仍然有未知错误。我认为这可能是一个安全考虑,我们不允许从 发送请求localhost
,为此我在服务 web.config 文件<httpProtocol>
的标签下添加如下:<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, soapaction" />
</customHeaders>
</httpProtocol>
对于这个问题,我看到了这个链接:
那么如何通过设置真正的内容类型从 HTML 文件调用 Restful 服务并在请求正文中发送 JSON 数组?