I have followed all the documentation I can find, but for some reason this is not working.
I was unable to find a solution from: .NET WebAPI Attribute Routing and inheritance
WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
//config.MapHttpAttributeRoutes();
config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
protected override IReadOnlyList<IDirectRouteFactory> GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
{
return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>(inherit: true);
}
}
BaseApiController
public class BaseApiController : ApiController
{
//Some stuff i require on the base controller
}
CrudApiController
public abstract class CrudController<TDto, TAdd, TEdit, TLookup> : BaseApiController
where TDto : BaseDto, new()
where TAdd : BaseModel
where TEdit : BaseModel
where TLookup : BaseModel
{
[HttpGet]
[Route("{guid:guid}")]
public virtual TAdd Get(Guid guid)
{
TDto dto = DataService.Get<TDto>(guid);
return dto.Map<TAdd>();
}
}
UsersController
[RoutePrefix("api/users")]
public class UsersController : CrudController<UserDto, AddUserModel, EditUserModel, UserGridModel>
{}
packages.config
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
When I run the following, I always get:
message:
No HTTP resource was found that matches the request URI 'http://localhost/accu/api/users/33ba2e96-06cb-43de-a661-1115039f630f?_=1446037569376'."
messageDetail:
No action was found on the controller 'Users' that matches the name '33ba2e96-06cb-43de-a661-1115039f630f'."
Unless I put,
[Route("{guid:guid}")]
public override AddUserModel Get(Guid guid)
{
return base.Get(guid);
}
on the UsersController
.