c# - 在 ASP .NET MVC 4 中运行 Owin 应用程序

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

我有一个 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”现在是每个请求的输出。仅当 Web.config 中指定的路径 owin-api/* 时,我如何才能告诉 IIS 使用 OwinHttpHandler?

最佳答案

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();
});

关于c# - 在 ASP .NET MVC 4 中运行 Owin 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40406313/

相关文章:

C# 代码在 Pinvoke SendMessage 之后挂起

c# - .Net 可执行文件中的内存泄漏工具

c# - if 语句有 2 个条件

asp.net - 迁移到 ASP.NET Core 1 后 Controller 无法工作

c# - ASP.NET MVC 将带空格的字符串模型列表转换为 javascript 数组

c# - 通过 MEF 在 plugin2 中使用 plugin1 中可用的方法

jquery - 通过 javascript 获取或设置 AjaxControlToolkit HTMLEditor 内容

c# - 用于制表符丢失焦点事件的 Javascript

asp.net-mvc-4 - Async 和 Await Action 方法。不异步工作。不知道原因吗?

ajax - ID值从ajax传递但在Action方法中没有接收为什么?