Asp.net URL重写模块(IIS)不能与托管在IIS上的OWIN中间件一起工作

Asp.net URL重写模块(IIS)不能与托管在IIS上的OWIN中间件一起工作,asp.net,iis,cors,owin,url-rewrite-module,Asp.net,Iis,Cors,Owin,Url Rewrite Module,如何将URL重写模块与OWIN中间件一起使用 阅读后,我说我应该能够使用NuGet包在IIS管道中使用OWIN中间件: Microsoft.Owin.Host.SystemWeb 以下是我尝试使用的代码: Web.config: )虽然仍然可以使用IIS重写模块,但可以重写对同一服务器上其他站点的调用 对于所有呼叫,我都收到此错误。将OWIN与IIS重写模块一起使用时: HTTP错误404.4-找不到 您正在查找的资源没有关联的处理程序 详细错误信息: 模块iiswebcore 通知MapRe

如何将URL重写模块与OWIN中间件一起使用

阅读后,我说我应该能够使用NuGet包在IIS管道中使用OWIN中间件:

Microsoft.Owin.Host.SystemWeb

以下是我尝试使用的代码:

Web.config:


)虽然仍然可以使用IIS重写模块,但可以重写对同一服务器上其他站点的调用

对于所有呼叫,我都收到此错误。将OWIN与IIS重写模块一起使用时:

HTTP错误404.4-找不到 您正在查找的资源没有关联的处理程序

详细错误信息:

模块iiswebcore

通知MapRequestHandler

处理程序扩展无URL-Integrated-4.0

错误代码0x8007007b


似乎重写模块没有注册,我不确定我做错了什么,或者我是否使用了正确的方法来实现这一点?

首先,根据默认设置,似乎在IIS Express上不起作用(我没有尝试在本地开发机器上安装它)

因此,当在Windows Server 2012上运行此程序时,在安装了IIS和IIS URL重写模块的情况下,我可以看到我的HTTP(s)请求开始被重写

为了进一步参考,我发布了我用来修复CORS飞行前问题的代码,同时还可以将HTTP(s)请求重写到其他服务器。请注意,这将允许来自任何来源的CORS请求

Startup.cs类:

使用Microsoft.Owin;
使用Owin;
[组件:OwinStartup(类型(启动))]
命名空间重写器
{
公营创业
{
公共无效配置(IAppBuilder应用程序)
{
app.Use();
app.Use();
}
}
}
CorsPreflightMiddlerware.cs类:

公共类CorsPreflightMiddlerware:owin中间件
{
private const string HTTP_METHOD_OPTIONS=“OPTIONS”;
公共CorsPreflightMiddlerware(下一个)
:base(下一个)
{
}
公共异步重写任务调用(IOwinContext上下文)
{
IOwinRequest req=context.Request;
IOwinResponse res=context.Response;
if(req.Method==HTTP\u方法\u选项)
{
res.StatusCode=(int)HttpStatusCode.OK;
res.Headers.AppendCommaseParatedValue(“访问控制允许方法”、“获取、发布、删除、放置、修补、选项”);
res.Headers.AppendCommaseParatedValue(“访问控制允许标头”、“内容类型、授权”);
}
其他的
{
等待下一步。调用(上下文);
}
}
}
corsauthorization.cs类:

公共类Corsauthorization中间件:OwinMiddleware
{
公共CorsAuthorizationMiddleware(OwinMiddleware next)
:base(下一个)
{
}
公共异步重写任务调用(IOwinContext上下文)
{
IOwinRequest req=context.Request;
IOwinResponse res=context.Response;
var origin=req.Headers.Get(“origin”);
如果(!string.IsNullOrEmpty(原点))
{
res.Headers.Set(“访问控制允许原点”,原点);
}
if(string.IsNullOrEmpty(res.Headers.Get(“访问控制允许凭据”))
{
res.Headers.Set(“访问控制允许凭据”、“true”);
}
res.Headers.AppendCommaseParatedValue(“访问控制允许方法”、“获取、发布、删除、放置、修补、选项”);
res.Headers.AppendCommaseParatedValue(“访问控制允许标头”、“内容类型、授权”);
等待下一步。调用(上下文);
}
}
Web.config: