2016-11-03 16 views
3

Owinアプリケーションを特定のパスでのみ実行するようにしているASP .NET MVC 4プロジェクトがあるので、から始まるすべてのリクエストはowin-api/*これを実現するためにASP .NET MVC 4でOwinアプリケーションを実行する

System.Web.Handlers.TransferRequestHandlerMVCパイプラインによってOwinパイプラインMicrosoft.Owin.Host.SystemWeb.OwinHttpHandler及びその他の要求によって処理されます、私は次のようしている。

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は、" 今、リクエストごとにoutoputです。 OwinHttpHandlerを使用するようIISに指示するには、パスowin-api/*がWeb.configに指定されている場合にのみ使用しますか?

+0

''の下にハンドラを追加しようとしましたか? – haim770

+0

@ haim770残念ながら、それは動作しません。問題はOwinが他のすべてのHTTPハンドラよりも優先されているようです –

+0

ワイルドカードなしで 'path =" owin-api "'を試しましたか? – haim770

答えて

3

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

app.Use()はトリックをしました:)ありがとう! –

関連する問題