中间件不会处理从浏览器到我的自主OWIN WebAPI的所有预检请求。如果我从Postman提出OPTIONS请求,他们将被处理。为什么会出现这样的行为?
请求 网址:http://localhost:9000/api/v1/conversations/create?connectionId=13509f44-eacb-4950-8cc8-71bd37098975
请求方法:选项
状态代码:401 Unauthorized Remote
地址:[:: 1]:9000
接受: /
接受编码:gzip,deflate,sdch,br
接受语言:RU-RU,如; Q = 0.8,的en-US; Q = 0.6,连接; Q = 0.4
访问控制请求报头:内容类型
访问控制请求-方法:POST
连接:保活
主机:本地主机:9000
的Referer:http://localhost:8080/
User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 56.0.2924.87 Safari / 537.36
Chrome的响应标头:
的Content-Length:0
日期:2017年2月8日星期三04:17:26 GMT
服务器:HTTPAPI / 2.0
WWW验证:NTLM
邮递员的回复标题:
Access-Control-Allow-Credentials→true
Access-Control-Allow-Origin→chrome-extension:// fhbjgbiflinjbdggehcddcbncdddomop
允许→POST
内容长度→76
Content-Type→application / 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();
});
并将断点放到“await next()”行。因此,当浏览器发出预检请求时,断点不会停止,而在邮递员OPTIONS响应时,断点也会停止。
答案 0 :(得分:4)
通过
解决了这个问题HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemeSelectorDelegate = request =>
{
if (request.HttpMethod == "OPTIONS")
{
return AuthenticationSchemes.Anonymous;
}
};