【问题标题】:OWIN preflight requests are not processed不处理 OWIN 预检请求
【发布时间】: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

来源:http://localhost:8080

推荐人:http://localhost:8080/

用户代理: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.Cors nuget 包、Microsoft.Owin.Cors nuget 包,然后 (2) 在 Startup.cs 文件中的 WebApiConfig.Register(config) 行上方添加 config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE")),然后 (3) 添加 @ 987654334@ 到Startup.Auth.cs 文件。没有 XML 配置。

标签: c# .net cors owin


【解决方案1】:

解决了这个问题

HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemeSelectorDelegate = request =>
{
   if (request.HttpMethod == "OPTIONS")
   {
       return AuthenticationSchemes.Anonymous;
   }
};

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 2021-09-26
    • 2014-10-31
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2016-02-17
    相关资源
    最近更新 更多