내 작업에 맞춤 경로 속성을 추가하려고 할 때 종속성 삽입에 문제가 있습니다. 나는 등 포스트, 취득하지만, 같은 표준 방법을 사용하려고 해요 때 모든 것이 잘 작동됩니다 내가 FindUsersByRole 조치를 호출하고있을 때 나는 오류 받고 있어요 :autofac에서 속성 라우팅을 사용하려고 시도한 예외
System.InvalidOperationException: An error occurred when trying to create a controller of type 'UsersController'. Make sure that the controller has a parameterless public constructor.
스택 추적 :
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()
을 내부 예외 :
System.ArgumentException: Type 'Novelis.WebApi.Controllers.UsersController' does not have a default constructor
스택 트레이스 :
at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
여기
[Authorize]
public class UsersController : ApiController
{
private readonly IUsersRepository _usersRepository;
public UsersController(IUsersRepository usersRepository)
{
_usersRepository = usersRepository;
}
//This is working fine
[HttpGet]
[ResponseType(typeof(List<UserInfoDto>))]
public IHttpActionResult Get()
{
IList<UserInfoDto> values = _usersRepository.SelectAll();
if (values == null || !values.Any())
return Ok();
return Json(new { collection = values });
}
//here I get an error
[HttpGet]
[Route("api/test/{roleId}/books")]
public IHttpActionResult FindUsersByRole(int roleId)
{
// association code
return Ok("test");
}
}
이 URL을 내가 전화 한 다음과 같습니다 : 여기
내 컨트롤러의 일부입니다 -
localhost:81/api/test/1/books
잘 작동 -
localhost:81/api/Users
나는 또한 오류를 게시하도록하겠습니다 내 구성 클래스 :
Global.asax :
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutofacConfig.Register();
}
AutofacConfig :
public class AutofacConfig
{
public static void Register()
{
var builder = new ContainerBuilder();
builder.RegisterModule(new AutoMapperModule());
builder.RegisterApiControllers(typeof(WebApiApplication).Assembly).PropertiesAutowired();
builder.RegisterModule(new NlogModule());
builder.RegisterModule(new RepositoryModule());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(container);
}
}
WebApiConfig :
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 }
);
config.Filters.Add(new ExceptionHandlingAttribute());
}
}
시작 : 당신은 두 개의 서로 다른 HttpConfiguration
를 사용하는
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
ConfigureOAuth(app);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
}
것은'[RoutePrefix ("API/사용자")]주는 시도 [권한 부여] 공용 클래스 UsersController : ApiController {...}'와 같은'FindUsersByRole' 경로를 수정'[루트 ("테스트/{역할 ID}/books ")]'그런 다음 url'localhost : 81/api/users/test/1/books'를 사용하여 메소드를 실행하십시오. – Developer
사용중인 패키지를 게시 할 수 있습니까? 'Autofac.WebApi2' 패키지가 있음을 알고 있습니까? –
@ 개발자가 여전히 동일한 오류가 발생합니다 –