0

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.

Community
  • 1
  • 1
Sean Thorburn
  • 1,728
  • 17
  • 31

0 Answers0