预检响应具有无效的 HTTP 状态代码 400 - aspx
Posted
技术标签:
【中文标题】预检响应具有无效的 HTTP 状态代码 400 - aspx【英文标题】:Response for preflight has invalid HTTP status code 400 - aspx 【发布时间】: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 - 您可以在代码或配置中使用它。可能您会从提琴手输出中获得更多详细信息。
【参考方案1】:
解决方案是将以下内容添加到 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();
【讨论】:
以上是关于预检响应具有无效的 HTTP 状态代码 400 - aspx的主要内容,如果未能解决你的问题,请参考以下文章
axios 和 reactjs:预检响应具有无效的 HTTP 状态代码 400
预检响应在角度 4 中具有无效的 HTTP 状态代码 500