0

Привет У меня есть этот REST услугиDisambiguation в ASP.NET WebAPI маршрутизации с помощью Action

  • GET админ/delegateduser
  • GET админ/delegateduser/идентификатор
  • GET delegateduser

мне удастся конфигурирование маршрута с этим отображением:

config.Routes.MapHttpRoute(
     name: "ActionApiWithId", 
     routeTemplate: "api/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 


config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
     ); 

И это контроллеры

public class AdminController : ApiController 
{ 
    // GET api/admin/delegatedusers 
    [ActionName("delegatedusers")] 
    public IEnumerable<x> Get() 
    { 
    } 

    // GET api/delegatedusers/<userid> 
    [ActionName("delegatedusers")] 
    public x Get(String id) 
    { 
    } 
} 

public class DelegatedUsersController : ApiController 
{ 
    public x Get() 
    { 
    } 
} 

Проблема заключается в том, что я могу добавить новый метод, который не должным образом решен. Метод

  • УДАЛИТЬ enrollrequest/идентификатор

Используя это отображение и контроллер

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
    );   

public class EnrollRequestController : ApiController 
{  
    /// DELETE api/enrollrequest/<id> 
    public void Delete(String id) 
    { 
    } 
} 

Если я поставил DefaultApi routMapping на верхней части файла WebApiConfig этот новый метод разрешен, но GET admin/delegateduser нет. Таким образом, похоже, что эти два метода конфликтуют с разрешениями URL.

Каким будет правильный способ сопоставить методы? Может быть, все должно быть проще, и я стал слишком сложным ....

Любая помощь приветствуется.

Заранее спасибо.

+0

Почему HttpMethod не указан для конечных точек ([HttpDelete], [HttpPost], [HttpGet], [HttpPut])? Считаете ли вы использование [AttributeRouting] (http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2)? – boosts

+0

Hi boosts. Теоретически метод не нужно указывать, поскольку имя метода начинается с Get, Delete. В любом случае я уже пытался указать его без изменений. Я использую Web API 1, поэтому я боюсь, что AttributeRouting недоступен. –

ответ

0

Наконец я нашел решение,

Конфликт, который УДАЛИТЬ enrollrequest/и ПОЛУЧИТЬ админ/delegateduser и приспособленный с правилами

{controller}/id 
{controller}/action 

Решаю, что добавление ограничения таким образом:

config.Routes.MapHttpRoute(
      name: "ActionApiWithId", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { action = "delegatedusers" } 
     );  

Теперь вызов DELETE enrollrequest/не соответствует маршруту, потому что он не заполняет ограничение.