2014-01-10 8 views
2

Я создаю службу WebApi2, и один из методов, которые я хочу реализовать, представляет HTTP GET из объекта во внутренней древовидной структуре - так что запрос будет связан с линии:Не удалось найти маршрут с помощью WebApi2 ApiController

GET /values/path/path/to/object/in/tree 

Так что я хочу, чтобы мой метод получить «путь/к/объект/в/дерево».

Однако, я просто получаю 404, когда запускаю это, и мне интересно, что я получаю 404, который отличается от стандартного IIS 404. Он называется «Ошибка сервера в приложении /», тогда как один для полностью недопустимого ресурса называется «HTTP Error 404.0 - Not Found».

Я играю с шаблоном по умолчанию, чтобы попытаться посмотреть, смогу ли я заставить это работать, следовательно, сходство.

У меня есть это для моего RouteConfig

public static void RegisterRoutes(RouteCollection routes) 
{ 
    var route = routes.MapRoute(
       name: "CatchAllRoute", 
       url: "values/path/{*pathValue}", 
       defaults: new { controller = "Values", action = "GetPath" }); 
} 

И это мой ValuesController:

[System.Web.Mvc.AuthorizeAttribute] 
[RoutePrefix("values")] 
public class ValuesController : ApiController 
{ 
    [Route("test/{value}")] 
    [HttpGet] 
    public string Test(string value) 
    { 
     return value; 
    } 

    [HttpGet] 
    public string GetPath(string pathValue) 
    { 
     return pathValue; 
    } 
} 

Интересно, если я извлечь из Controller, а не ApiController он работает нормально, но потом нормальный маршрутизации атрибут не работает.

Я пробовал следовать методологии в this post (http://www.tugberkugurlu.com/archive/asp-net-web-api-catch-all-route-parameter-binding), но я не мог заставить ее работать.

Я уверен, что мне не хватает чего-то глупого, но, потратив несколько часов на это, я подумал, что разумно спросить, что я делаю неправильно.

Благодаря

M

+0

Вы не забыли сделать 'config.MapHttpAttributeRoutes();' зарегистрировать маршруты атрибутов? – crunchy

ответ

5

Web API маршрутизации не то же самое, как маршрутизации MVC. вместо

route.MapRoute 

попробовать

public static void Register(HttpConfiguration config) { 
    config.MapHttpAttributeRoutes 

    config.Routes.MapHttpRoute(
     name: "CatchAll", routeTemplate: "values/path/{*pathvalue}", 
     defaults: new {id = RouteParameter.Optional }); 
} 

Причина, по которой работает от контроллера, что MapRoute правильный формат для маршрутизации контроллера MVC, в то время как MapHttpRoute предназначен для контроллеров API.

+3

Я чувствую себя ругательством. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^