2016-08-09 21 views
0

新しいWebアプリケーションを設定しています。私たちは、継続的なバックグラウンド操作(CQRS予測)を実行するサービスを提供しています。その理由は、Windowsサービスでそれらをホストしているからです。これらのサービスを使用して、対応するWeb APIもホストしたいと思っています(そうでなければ、メモリ内予測に対応できませんでした)。自己ホスト型(OWIN)Web API内の領域

さらに、私たちは、投射が更新されるたびにクライアントに通知するためにSignalRをサポートしたいと考えています。私たちはテンプレート作成のためにRazorビューを使用しているので、別々のASP.NET MVCアプリケーションがあります。

私たちは、Web APIをいくつかの領域に分割したいと思っています。これは、ASP.NET(MVC)アプリケーションで可能な方法に似ています。などhttp://localhost:8080/Orders/api/{Controller}/{id}またはhttp://localhost:8080/Foo/api/{Controller}/{id}

後で、コントローラ、投影図、モデルなどを別々のアセンブリに配置することもできます。繰り返しますが、コンテキストごとに1つ

自己ホスト型Web APIプロジェクトで領域を定義することは可能ですか?特定のアセンブリのコントローラにルーティングすることは可能でしょうか?

答えて

0

https://blogs.msdn.microsoft.com/webdev/2013/03/07/asp-net-web-api-using-namespaces-to-version-web-apis/の記事のおかげで私はそれを解決しました。

は、私は自分のIHttpControllerSelectorを実装し、そのようStartup.csでデフォルト1を交換する必要があります:https://aspnet.codeplex.com/SourceControl/changeset/view/dd207952fa86#Samples/WebApi/NamespaceControllerSelector/NamespaceHttpControllerSelector.cs

I:

/// <summary> 
/// OWIN startup class 
/// </summary> 
public class Startup 
{ 
    /// <summary> 
    /// Owin configuration 
    /// </summary> 
    /// <param name="app">App builder</param> 
    public void Configuration(IAppBuilder app) 
    { 
     // We might have to resolve the referenced assemblies here or else we won't find them. This is a quick and dirty way to make sure that the assembly containing the controller has been loaded 

     var x = typeof(CarRental.Reservations.Application.Read.Web.FooController); 

     // Configure Web API for self-host. 
     var config = new HttpConfiguration(); 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{boundedcontext}/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     // Enable routing via bounded context 
     config.Services.Replace(typeof(IHttpControllerSelector), new BoundedContextControllerSelector(config)); 

     app.UseWebApi(config); 

     // Configure SignalR 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(); 
    } 
} 

例のコードに非常に近いIHttpControllerSelectorの実装であることBoundedContextControllerSelector付き名前空間を使用して境界のあるコンテキストを判断し、各コンテキストのWeb APIエンドポイントを明確に分離してください:)

関連する問題