【问题标题】:Areas in self-hosted (OWIN) Web API自托管 (OWIN) Web API 中的区域
【发布时间】:2016-12-15 07:35:21
【问题描述】:

我正在设置一个新的网络应用程序。我们有执行连续后台操作(CQRS 投影)的服务,这就是我们将它们托管在 Windows 服务中的原因。我们还想使用这些服务来托管相应的 Web API(否则我们无法提供内存中的投影)。

此外,我们希望 SignalR 支持在投影更新时通知客户。我们有一个单独的 ASP.NET MVC 应用程序,因为我们使用 Razor 视图进行模板化。

我们希望将 Web API 分成几个区域 - 类似于在 ASP.NET (MVC) 应用程序中的做法 - 每个有界上下文一个区域。如http://localhost:8080/Orders/api/{Controller}/{id}http://localhost:8080/Foo/api/{Controller}/{id}

稍后我们还希望将控制器、投影、模型等放在单独的程序集中。同样,每个上下文一个

是否可以在自托管 Web API 项目中定义区域?是否可以将它们从特定组件路由到控制器?

【问题讨论】:

    标签: asp.net asp.net-web-api owin


    【解决方案1】:

    感谢https://blogs.msdn.microsoft.com/webdev/2013/03/07/asp-net-web-api-using-namespaces-to-version-web-apis/的文章我已经解决了。

    我必须实现自己的 IHttpControllerSelector 并替换 Startup.cs 中的默认值,如下所示:

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

    BoundedContextControllerSelectorIHttpControllerSelector 的实现,与示例中的代码非常接近:https://aspnet.codeplex.com/SourceControl/changeset/view/dd207952fa86#Samples/WebApi/NamespaceControllerSelector/NamespaceHttpControllerSelector.cs

    我使用命名空间来确定有界上下文,现在每个上下文都有一个明确的 web api 端点分离:)

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      相关资源
      最近更新 更多