Настройте Autofac для работы с ASP.NET MVC и ASP.NET Web Api для существующего приложения. - PullRequest
0 голосов
/ 07 сентября 2018

У нас есть приложение, которое было настроено на использование AutoFac с ASP.Net MVC:

1) Все контроллеры, информация о действиях и маршрутизация были зарегистрированы вручную с использованием AutoFac 2) Контроллеры разрешаются с помощью реализации метода CreateController () класса IControllerFactory (AutoFacControllerFactory). 3) Я добавил новый контроллер API в существующее приложение 4) Маршрутизация веб-API была добавлена ​​до любых традиционных маршрутов ASP.Net следующим образом:

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

5) Новые API-контроллеры были зарегистрированы с использованием AutoFac до того, как containerBuilder.Build () si был вызван следующим образом:

    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 версия 2.6.3.863, и версия Newtonsoft.Json - 11.0.0.0, версия сервера IIS - 6.1 в Windows Server 2008

8) Цель состоит в том, чтобы сделать так, чтобы Autofac, Asp.net MVC-маршрутизация и веб-API-маршрутизация сосуществовали в одном пуле приложений, когда я пробую конечную точку веб-API http://localhost:7070/secure/banking/administration/GetNetworkFeatures/Get, он все еще идет в метод CreateController () AutoFacControllerFactory, вместо маршрутизации в метод Get () контроллера Web API GetNetworkFeaturesController

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 голосов
/ 09 сентября 2018

Я исправил проблему. Причина в том, что мы используем обратный прокси-сервер для проверки подлинности, который настроен для маршрутизации любых аутентифицированных запросов «~ / secure / banking / api / XXX» к реальной конечной точке «api / xxx» на сервере IIS. Если я избавлюсь от «безопасного / банковского» в следующем шаблоне маршрута, маршрутизация Web API будет немедленно соблюдена:

GlobalConfiguration.Configuration.Routes.MapHttpRoute ( "GetNetworkFeatures", "Обеспечение / банковское дело / управление / GetNetworkFeatures / Get", new {controller = "GetNetworkFeatures"});

Приветствия

Уильям Фенг

...