【发布时间】:2017-05-10 18:51:22
【问题描述】:
我正在使用 Visual Studio 2015 编写服务器和客户端。 以下问题在 Chrome 和 FireFox 中出现,但在 Explorer 中完美运行。 我正在使用 AJAX 对我的服务器进行 Rest post 调用,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 中的注册函数:
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 请求中工作,但我不会在我的服务器中获取数据。
我不知道该怎么做,什么都试过了。
【问题讨论】:
-
您可以尝试使用
object类型而不是dynamic吗? -
@Developer 这不能解决我的问题,为什么需要这个改变?
-
只是想检查这是否是模型绑定相关的问题,同时将 json 绑定到动态对象。通常
contentType: "application/json"(虽然我从不提供字符集)应该正确绑定到对象/类 -
@Developer 这不是当前的问题。 (在我的项目中仔细检查过,仍然是同样的错误)
-
哎呀对不起,请阅读问题标题。似乎您的问题与 CORS 预检有关。理想情况下,您不需要在两个地方配置 CORS - 您可以在代码或配置中使用它。可能您会从提琴手输出中获得更多详细信息。
标签: javascript c# jquery ajax cors