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

26 浏览
0 Comments

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

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

1)所有的控制器、动作信息和路由都已经使用AutoFac手动注册。

2)控制器是通过IControllerFactory的CreateController()方法的实现来解析的(AutoFacControllerFactory)。

3)我在现有的应用程序中添加了一个新的API控制器。

4)在任何传统的ASP.Net路由之前,Web API路由已经被添加如下:

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

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

    foreach (var module in modules)
    {
        builder.RegisterApiControllers(module);
    }
    container = containerBuilder.Build();
GetNetworkFeaturesController在上述模块之一中加载

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版本是

2.6.3.863,Newtonsoft.Json版本是11.0.0.0,IIS服务器版本是6.1在Windows Server 2008上

8)目标是使AutoFac、Asp.net MVC路由和Web API路由在同一个应用程序池中共存,当我尝试Web API端点

http://localhost:7070/secure/banking/administration/GetNetworkFeatures/Get时,它仍然进入AutoFacControllerFactory的CreateController()方法,而不是路由到Web API控制器GetNetworkFeaturesController的Get()方法。

9)我认为这可能与XX有关,所以我将其更改为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 Comments

问题的原因是使用了一个反向代理进行身份验证,并且配置了将任何经过身份验证的请求“~/secure/banking/api/XXX”路由到IIS服务器中的真实端点“api/xxx”。如果在下面的路由模板中去掉“secure/banking”,Web API的路由将立即被遵循:

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

解决方法:

1. 删除路由模板中的"secure/banking"部分。

这样,Autofac就可以与现有的ASP.NET MVC和ASP.NET Web API应用程序一起正常工作了。

0