【发布时间】:2017-06-25 13:47:39
【问题描述】:
中间件不处理从浏览器到我的自托管 OWIN WebAPI 的所有预检请求。如果我向邮递员发出 OPTIONS 请求,它们就会被处理。为什么会有这样的行为?
请求 网址:http://localhost:9000/api/v1/conversations/create?connectionId=13509f44-eacb-4950-8cc8-71bd37098975
请求方法:OPTIONS
状态码:401 未经授权的遥控器
地址:[::1]:9000
接受:/
接受编码:gzip、deflate、sdch、br
接受语言:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
访问控制请求标头:内容类型
访问控制请求方法:POST
连接:保持活动状态
主机:本地主机:9000
用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Chrome 的响应标头:
内容长度:0
日期:格林威治标准时间 2017 年 2 月 8 日星期三 04:17:26
服务器:Microsoft-HTTPAPI/2.0
WWW-身份验证:NTLM
Postman 的响应标头:
Access-Control-Allow-Credentials →true
Access-Control-Allow-Origin →chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
允许 →POST
内容长度 →76
内容类型→应用程序/json;字符集=utf-8
日期 →2017 年 2 月 8 日星期三 04:21:02 GMT
服务器→Microsoft-HTTPAPI/2.0
我在我的 appbuilder 中添加了假中间件:
public void BuildWebApi(IAppBuilder appBuilder)
{
appBuilder.Use(async (ctx, next) =>
{
await next();
});
并将断点放在“等待下一个()”行。所以断点不会在浏览器发出预检请求时停止,而在邮递员 OPTIONS 响应时停止。
【问题讨论】:
-
stackoverflow.com/questions/24989769/… 和 stackoverflow.com/questions/20079813/… 可能是相关的。如果您还在问题中包含请求标头,它也可能会有所帮助。
-
UseCors 不起作用,因为它还在后台添加了不会在来自 Chrome 的预检请求中调用的中间件。当然我已经添加了 UserCors() 和 config.EnableCors() 但它没有效果。
-
好的,所以stackoverflow.com/questions/20079813/… 对你没有帮助?
-
不,因为自托管,我没有任何 xml 配置。我已将请求标头添加到问题中。
-
请阅读stackoverflow.com/questions/20079813/…的答案。它不使用任何 XML 配置。相反,它涉及:(1) 安装
Microsoft.AspNet.WebApi.Corsnuget 包、Microsoft.Owin.Corsnuget 包,然后 (2) 在Startup.cs文件中的WebApiConfig.Register(config)行上方添加config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE")),然后 (3) 添加 @ 987654334@ 到Startup.Auth.cs文件。没有 XML 配置。