[英]Why this webapi 2 setup with Autofac does not work?
幾個小時以來,我一直在努力工作,為什么以下設置不起作用。 拋出404。
到目前為止,我做了什么:
我錯過了什么? 我還應該檢查什么?
它是如何工作的,或者是我想工作的。 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
感謝您的任何幫助!
更新 :
取消注釋該怎么辦?
//GlobalConfiguration.Configure(WebApiConfig.Register);
沒有該部分,就不會激活路由,經典路由和屬性路由都不會,因此我猜想404是正確的答案。 我懷疑問題是Autofac。 順便說一句,容器問題幾乎每次都解決為500,而不是404。
希望能幫助到你 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.