OWIN预检请求未得到处理

时间:2017-02-08 04:26:54

标签: c# .net cors owin

中间件不会处理从浏览器到我的自主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

     

产地:http://localhost:8080

     

的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响应时,断点也会停止。

1 个答案:

答案 0 :(得分:4)

通过

解决了这个问题
HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemeSelectorDelegate = request =>
{
   if (request.HttpMethod == "OPTIONS")
   {
       return AuthenticationSchemes.Anonymous;
   }
};