【问题标题】:Run Owin app in ASP .NET MVC 4在 ASP .NET MVC 4 中运行 Owin 应用程序
【发布时间】:2016-11-03 16:08:36
【问题描述】:

我有一个 ASP .NET MVC 4 项目,我正在尝试集成 Owin 应用程序以仅针对特定路径运行,因此所有以 owin-api/* 开头的请求都将由Owin 管道 Microsoft.Owin.Host.SystemWeb.OwinHttpHandler 和 MVC 管道 System.Web.Handlers.TransferRequestHandler

的其他请求

要做到这一点,我有以下几点:

Web.config

<appSettings>
    <add key="owin:appStartup" value="StartupServer.Startup"/>
</appSettings>   
<system.webServer>
        <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <remove name="OPTIONSVerbHandler" />
            <remove name="TRACEVerbHandler" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
            <add  name="Owin" verb="*" path="owin-api/*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb" />
        </handlers>
</system.webServer>

启动类:

namespace StartupServer
{

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(context =>
            {
                return context.Response.WriteAsync("Owin API");
            });
        }
    }
}

但是,“Owin API”现在是每个请求的输出。我如何告诉 IIS 只有在 Web.config 中指定的路径 owin-api/* 时才使用 OwinHttpHandler?

【问题讨论】:

  • 您是否尝试在&lt;location path="owin-api"&gt;下添加处理程序?
  • @haim770 不幸的是它不起作用。问题是 Owin 似乎优先于所有其他 http 处理程序
  • 你试过不带通配符的path="owin-api"吗?

标签: c# asp.net asp.net-mvc-4 owin katana


【解决方案1】:

app.Run() 将一个没有下一个中间件引用的中间件插入到 OWIN 管道中。所以你可能想用app.Use()替换它。

您可以检测 URL 并以此为基础制定逻辑。例如:

app.Use(async (context, next) =>
{
    if (context.Request.Uri.AbsolutePath.StartsWith("/owin-api"))
    {
        await context.Response.WriteAsync("Owin API");
    }
    await next();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2018-04-11
    • 2013-01-14
    • 2013-12-02
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多