问题
当我在实际控制器上创建一个带路由的方法时,请说: “api / country / something”......
当我执行上述请求时,我的代码将被执行&数据被返回。
但是当我尝试在基本控制器上调用我的路由时。 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)
{
}
}
基
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 :(得分:3)
Web API中的属性路由不支持Route
属性的继承。如果您查看Inherited = false
类的定义...
RouteAttribute
指示的内容
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
public sealed class RouteAttribute : Attribute, IDirectRouteFactory, IHttpRouteInfoProvider
{ ...
这解释了为什么你得到404,因为Route
属性实际上消失了。
由于该属性不可继承且类是密封的,我不知道是否有办法使用开箱即用的属性路由基础结构。
更新:Web API团队的一名成员解释说,这是一项设计决定,它不会被继承...... https://stackoverflow.com/a/19989344/3199781