簡體   English   中英

為什么使用Autofac進行的webapi 2設置不起作用?

[英]Why this webapi 2 setup with Autofac does not work?

幾個小時以來,我一直在努力工作,為什么以下設置不起作用。 拋出404。

到目前為止,我做了什么:

  • 我已經檢查了nuget軟件包-很好,所有最新
  • 我已經檢查了Autofac文檔-下面的代碼來自那里,除了typeregisters
  • 我已經檢查了主機文件-本地主機設置正確
  • 我創建了一個空的新WebApi2項目,並使用同一webapp來檢查其是否正常工作,所以問題就在於Autofac集成
  • 我已經注釋了所有Autofac設置,然后回到了基本的webapi設置,該請求引發錯誤,因為控制器在構造函數中具有參數,這很好,因為請求命中了控制器
  • 我搜索了Autofac WebApi2集成和示例,我的代碼似乎還可以

我錯過了什么? 我還應該檢查什么?

它是如何工作的,或者是我想工作的。 WebApi控制器僅獲取businesslogic作為參數,Autofac應該處理它,而BusinessLogic庫獲取其他樹組件(Mapper,SoapClient,存儲庫)。 它應該可以工作,或者至少我的其他應用程序中具有類似的設置,但是該應用程序也具有Owin設置。

public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            var builder = new ContainerBuilder();

            var config = GlobalConfiguration.Configuration;

            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

            builder.RegisterWebApiFilterProvider(config);


            builder.RegisterType<Repository.Repository.Repository>()
                .As<IRepository.IRepository.IRepository>();

            builder.RegisterType<BusinessLogic.BusinessLogic.BusinessLogic.BusinessLogic>()
                .As<IBusinessLogic>();

            builder.RegisterType<SoapClient>()
                .As<ISoapClient>();

            builder.RegisterType<Mapper.Mapper.Mapper.Mapper>()
                .As<IMapper>();

            var container = builder.Build();
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

            //GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
            config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
        }
    }

[RoutePrefix("PipelineWorkflow")]
    public class PipelineWorkflowController : ApiController
    {
        #region Private variables
        private IBusinessLogic _businessLogic;

        #endregion

        #region Constructors
        public PipelineWorkflowController(IBusinessLogic businessLogic)
        {
            _businessLogic = businessLogic;
        }

        #endregion
        [HttpGet]
        [Route("GetPipelineWorkflows")]
        public string GetPipelineWorkflows()
        {
            return "asd";
        }

    }

已安裝的Nuget軟件包

PM> Get-Package -project GoNoGo.Services.webapi | Format-Table -Autosize

Id                              Versions ProjectName           
--                              -------- -----------           
Autofac                         {3.5.2}  GoNoGo.Services.WebApi
Autofac.WebApi2                 {3.4.0}  GoNoGo.Services.WebApi
EntityFramework                 {6.1.3}  GoNoGo.Services.WebApi
Microsoft.AspNet.WebApi         {5.2.3}  GoNoGo.Services.WebApi
Microsoft.AspNet.WebApi.Client  {5.2.3}  GoNoGo.Services.WebApi
Microsoft.AspNet.WebApi.Core    {5.2.3}  GoNoGo.Services.WebApi
Microsoft.AspNet.WebApi.WebHost {5.2.3}  GoNoGo.Services.WebApi
Newtonsoft.Json                 {8.0.2}  GoNoGo.Services.WebApi

感謝您的任何幫助!

更新

  • 我已經將Autofac替換為Unity,它的運行就像是一種魅力。

取消注釋該怎么辦?

//GlobalConfiguration.Configure(WebApiConfig.Register);

沒有該部分,就不會激活路由,經典路由和屬性路由都不會,因此我猜想404是正確的答案。 我懷疑問題是Autofac。 順便說一句,容器問題幾乎每次都解決為500,而不是404。

希望能幫助到你 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM