C# 未处理OWIN飞行前请求

C# 未处理OWIN飞行前请求,c#,.net,cors,owin,C#,.net,Cors,Owin,中间件不会处理从浏览器到我自己的主机OWIN WebAPI的所有飞行前请求。如果我向邮递员提出选择请求,它们将被处理。为什么会有这样的行为 请求 网址: 请求方法:选项 状态代码:401未经授权的远程 地址:[::1]:9000 接受:/ 接受编码:gzip、deflate、sdch、br 接受语言:如如如,如;q=0.8,在美国;q=0.6,en;q=0.4 访问控制请求头:内容类型 访问控制请求方法:POST 连接:保持活力 主机:localhost:9000 来源: 推荐人: 用户代理:M

中间件不会处理从浏览器到我自己的主机OWIN WebAPI的所有飞行前请求。如果我向邮递员提出选择请求,它们将被处理。为什么会有这样的行为

请求 网址:

请求方法:选项

状态代码:401未经授权的远程

地址:[::1]:9000

接受:/

接受编码:gzip、deflate、sdch、br

接受语言:如如如,如;q=0.8,在美国;q=0.6,en;q=0.4

访问控制请求头:内容类型

访问控制请求方法:POST

连接:保持活力

主机:localhost:9000

来源:

推荐人:

用户代理:Mozilla/5.0 Windows NT 10.0;Win64;x64 AppleWebKit/537.36 KHTML,如Gecko Chrome/56.0.2924.87 Safari/537.36

Chrome的响应标题:

内容长度:0

日期:2017年2月8日星期三04:17:26 GMT

服务器:Microsoft HTTPAPI/2.0

WWW:NTLM

邮递员的响应标题:

访问控制允许凭据→真的

访问控制允许源→铬-extension://fhbjgbiflinjbdggehcddcbncdddomop

容许→职位

内容长度→76

内容类型→应用程序/json;字符集=utf-8

日期→2017年2月8日星期三04:21:02 GMT

服务器→微软HTTPAPI/2.0

我在appbuilder中添加了假的中间件:

public void BuildWebApi(IAppBuilder appBuilder)
    {
        appBuilder.Use(async (ctx, next) =>
        {
            await next();
        });
并将断点放在等待下一行。所以,断点不会在浏览器发出飞行前请求时停止,而在邮递员选项响应时停止。

解决了这个问题

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

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

而且可能是相关的。此外,如果您在问题中也包含请求头,可能会有所帮助。UseCors不起作用,因为它也在后台添加了中间件,这些中间件不会在来自Chrome的飞行前请求中调用。当然,我已经添加了UserCors和config.EnableCors,但它没有任何效果。好的,这对您没有帮助吗?不,我没有任何xml配置,因为我自己的主机。我在问题中添加了请求标题。请阅读以下网址的答案。它不使用任何XML配置。相反,它涉及:1安装Microsoft.AspNet.WebApi.Cors nuget包、Microsoft.Owin.Cors nuget包,然后2在Startup.cs文件的WebApiConfig.Registerconfig行上方添加config.EnableCorsnew EnableCorsAttribute*、*、GET、POST、OPTIONS、PUT、DELETE,然后3将app.UseCorsMicrosoft.Owin.Cors.CorsOptions.AllowAll添加到Startup.Auth.cs文件中。没有XML配置。而且可能是相关的。此外,如果您在问题中也包含请求头,可能会有所帮助。UseCors不起作用,因为它也在后台添加了中间件,这些中间件不会在来自Chrome的飞行前请求中调用。当然,我已经添加了UserCors和config.EnableCors,但它没有任何效果。好的,这对您没有帮助吗?不,我没有任何xml配置,因为我自己的主机。我在问题中添加了请求标题。请阅读以下网址的答案。它不使用任何XML配置。相反,它涉及:1安装Microsoft.AspNet.WebApi.Cors nuget包、Microsoft.Owin.Cors nuget包,然后2在Startup.cs文件的WebApiConfig.Registerconfig行上方添加config.EnableCorsnew EnableCorsAttribute*、*、GET、POST、OPTIONS、PUT、DELETE,然后3将app.UseCorsMicrosoft.Owin.Cors.CorsOptions.AllowAll添加到Startup.Auth.cs文件中。没有XML配置。