2014-02-06 3 views
1

문제웹 API. 내가 실제 컨트롤러의 경로와 방법을 만들 때 속성,

라우팅과 일반 컨트롤러 말 : "API/국가/뭔가"... 내가 수행

을 위의 요청에 따라 코드가 실행되어 & 데이터가 반환됩니다.

하지만베이스 컨트롤러에서 내 경로로 전화를 걸 때. E.G : "api/country/code/123"

404 오류가 발생합니다.

질문

라우팅 속성의 사용을 만드는 동안 일반적인 경로를 구현하는 방법에 대한 어떤 생각?

특정 컨트롤러

[RoutePrefix("Country")] 
public class CountryController : MasterDataControllerBase<Country, CountryDto> 
{ 
    public CountryController(
      IGenericRepository<Country> repository, 
      IMappingService mapper, 
      ISecurityService security) : base(repository, mapper, security) 
      { 
      } 
} 

기지 Route 속성의 상속을 지원하지 않는 웹 API에 라우팅

public class MasterDataControllerBase<TEntity, TEntityDto> : ControllerBase 
    where TEntity : class, ICodedEntity, new() 
    where TEntityDto : class, new() 
{ 
    private readonly IMappingService mapper; 

    private readonly IGenericRepository<TEntity> repository; 

    private readonly ISecurityService security; 

    public MasterDataControllerBase(IGenericRepository<TEntity> repository, IMappingService mapper, ISecurityService security) 
    { 
     this.security = security; 
     this.mapper = mapper; 
     this.repository = repository; 
    } 

    [Route("code/{code}")] 
    public TEntityDto Get(string code) 
    { 
     this.security.Enforce(AccessRight.CanAccessMasterData); 

     var result = this.repository.FindOne(o => o.Code == code); 

     return this.mapper.Map<TEntity, TEntityDto>(result); 
    } 
} 
+0

가능한 중복 http://stackoverflow.com/questions/19989023/net-webapi-attribute ... 상속 아니라고 디자인 결정이었다 설명 -routing-and-inheritance/24969829 # 24969829 – Dejan

답변

3

특성. 당신은 당신이 Route 속성을 효과적으로 사라로, 404을 얻고있는 이유

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = true)] 
public sealed class RouteAttribute : Attribute, IDirectRouteFactory, IHttpRouteInfoProvider 
{ ... 

이 설명 ... 당신이 RouteAttribute 클래스의 정의를 보면이 Inherited = false로 표시 볼 수 있습니다.

속성이 상속받지 못하고 클래스가 봉인 되었기 때문에 상자에서 제공되는 속성 라우팅 인프라로이 작업을 수행 할 수있는 방법이 있는지 모르겠습니다.

업데이트 : 웹 API 팀의 일원 https://stackoverflow.com/a/19989344/3199781

+1

웹 API 2.2부터는 라우트 속성을 상속하는 것이 가능합니다. http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-22를 참조하십시오. – Onots