我正在使用visual studio 2015编写服务器和客户端。 Chrome和FireFox中出现以下问题,但在资源管理器中运行良好。 我正在使用AJAX对我的服务器进行休息后调用,即AJAX代码:
function CheckIntegrityExecution() {
var request = ...
var reqJson = JSON.stringify(request);
$.ajax({
type: "POST",
url: "http://localhost:55857/api/post/flow",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: reqJson,
success: function (jsonData) {
...
},
error: function () {
alert("error");
}
});
}
最初我遇到了405错误,这是通过添加
来解决的 var cors = new EnableCorsAttribute("http://localhost:55857", "*", "*");
config.EnableCors(cors);
Global.asax中的Register函数:
public static void Register(HttpConfiguration config)
现在我收到以下错误:
XMLHttpRequest cannot load http://localhost:55857/api/post/flow. Response for preflight has invalid HTTP status code 400
我服务器中的方法签名是
[Route("api/post/flow")]
public HttpResponseMessage PostCommand([FromBody] dynamic value)
我在WebApi的Web.config中有这些配置。
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="OPTIONS, TRACE, GET, HEAD, POST, PUT" />
<add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Authorization, Accept, X-Requested-With" />
</customHeaders>
我注意到,如果我删除
contentType: "application/json; charset=utf-8",
从Ajax请求我将工作,但我不会在我的服务器中获取数据。
我不知道该怎么做,尝试了一切。
答案 0 :(得分:2)
解决方案是将以下内容添加到Global.asax文件
protected void Application_BeginRequest()
{
var context = HttpContext.Current;
var response = context.Response;
if (context.Request.HttpMethod == "OPTIONS")
{
response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
response.End();
}
}