我们有一个已配置为将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/
答案 0 :(得分:0)
我已解决此问题。原因是我们正在使用反向代理进行身份验证,该身份验证配置为将任何已通过身份验证的请求“〜/ secure / banking / api / XXX”路由到IIS服务器中的真实端点“ api / xxx”。如果我摆脱了以下路由模板中的“安全/银行”,则会立即遵循Web API路由:
GlobalConfiguration.Configuration.Routes.MapHttpRoute(“ GetNetworkFeatures”, “安全/银行/管理/ GetNetworkFeatures /获取”, new {controller =“ GetNetworkFeatures”});
欢呼
威廉·冯