将Autofac配置为与ASP.NET MVC和ASP.NET Web Api一起用于现有应用程序

时间:2018-09-07 01:36:29

标签: asp.net-mvc asp.net-web-api autofac

我们有一个已配置为将AutoFac与ASP.Net MVC一起使用的现有应用程序:

1)所有的控制器,动作信息和路由均已使用AutoFac手动注册 2)通过IControllerFactory(AutoFacControllerFactory)CreateController()方法的实现来解析控制器 3)我向现有应用程序添加了新的API控制器 4)Web API路由已在任何传统的ASP.Net路由之前添加,如下所示:

GlobalConfiguration.Configuration.Routes.MapHttpRoute("GetNetworkFeatures",
"secure/banking/administration/GetNetworkFeatures/Get",
new { controller = "GetNetworkFeatures" });

5)在containerBuilder.Build()si之前,也已使用AutoFac注册了新的API控制器,如下所示:

    foreach (var module in modules)
    {
        builder.RegisterApiControllers(module);
    }

    container = containerBuilder.Build();

GetNetworkFeaturesController is loaded in one of the above modules

6)两个依赖解析器均已注册如下:

    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

7).Net版本是4.5.2,我们使用的是ASP.Net MVC版本3,AutoFac版本是2.6.3.862,AutoFac.Integration.MVC版本是2.6.3.862,AutoFac.Integration.WebApi版本是     Windows Server 2008中的2.6.3.863和Newtonsoft.Json版本是11.0.0.0,IIS服务器版本是6.1

8)当我尝试使用Web API端点时,目标是使Autofac,Asp.net MVC路由和Web API路由共存于同一应用程序池中     http://localhost:7070/secure/banking/administration/GetNetworkFeatures/Get,它仍然转到AutoFacControllerFactory的CreateController()方法,而不是路由到Web API控制器GetNetworkFeaturesController的Get()方法

9)我认为这可能与有关,因此我将其更改为true,但是问题仍然存在。基本上看起来像     尽管没有编译和构建错误,但不遵循配置的Web API路由,如果我删除了以下默认路由,它将开始引发HTTP 403错误:

 RouteTable.Routes.MapRoute("Default", "{*url}", new { controller = "Unspecified", action = "Unspecified" });

10)已引用以下线程:

https://stackoverflow.com/questions/11484904/is-it-possible-to-configure-autofac-to-work-with-asp-net-mvc-and-asp-net-web-api
https://stackoverflow.com/questions/37069666/autofac-with-web-api-controller
https://stackoverflow.com/questions/44986001/web-api-route-values-is-empty-on-action-executes-filter
https://stackoverflow.com/questions/15556035/all-asp-net-web-api-controllers-return-404
https://www.aspforums.net/Threads/218940/Solved-URL-Routing-not-working-with-Web-API-in-IIS-server-and-ASPNet-MVC/

1 个答案:

答案 0 :(得分:0)

我已解决此问题。原因是我们正在使用反向代理进行身份验证,该身份验证配置为将任何已通过身份验证的请求“〜/ secure / banking / api / XXX”路由到IIS服务器中的真实端点“ api / xxx”。如果我摆脱了以下路由模板中的“安全/银行”,则会立即遵循Web API路由:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(“ GetNetworkFeatures”, “安全/银行/管理/ GetNetworkFeatures /获取”, new {controller =“ GetNetworkFeatures”});

欢呼

威廉·冯