2014-09-08 5 views
4

Обзор

В настоящее время я пытаюсь получить маршрутизацию атрибутов для работы с моими контроллерами api. Кажется, он работает, и я не уверен, почему. Я не уверен, что мне не хватает решающего шага или проблемы.ASP MVC 5 Маршрутизация атрибутов не регистрирует маршруты

Проблема

Я пытался ударить локальный/API/пользователь/пользовательское? Тест = 1 но я получаю 404 (я ожидаю, что это работает)

Если я ударил Localhost/api/customapi? test = 1 Я успешно попал в свой метод

Почему первый URL-адрес не работает?

Настройка

Моя установка выглядит следующим образом:

CustomController.cs

[System.Web.Mvc.RoutePrefix("api")] 
public class CustomApiController : ApiController 
{ 
    [System.Web.Mvc.Route("user/custom")] 
    [System.Web.Http.HttpGet] 
    public async Task<CustomResponse> Get([FromUri] CustomRequest request) 
    { 
     //Work 
    } 
} 

WebApiConfig.cs

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     ...(json serializer settings)... 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

RouteConfig.cs

public static class RouteConfig 
{ 
    public static void Register(RouteCollection routes, bool registerAreas = true) 
    { 
     if(registerAreas) 
     { 
      AreaRegistration.RegisterAllAreas(); 
     } 

     //Ignore Routes 
     ... 

     //Register specific routes 
     routes.MapRoute("HomeUrl", "home", new { controller = "Home", action = "Index" }); 
     . 
     . 

     routes.MapRoute(
      "Default", //Route name 
      "{controller}/{action}/{id}", //URL with parameters 
      new { controller = "Home", action = "Index", id =UrlParameter.Optional } 
      ); 
    } 
}  

Global.asax.cs

public class Global : HttpApplication 
{ 
    protected void Application_Start() 
    { 
     ....(app startup stuff)... 

     GlobalConfiguration.Configure(WebApiConfig.Register); 
     BundleConfig.Register(BundleTable.Bundles); 

     ....(more app startup stuff)... 

     RouteConfig.Register(RouteTable.Routes); 
    } 
} 

ответ

12

Я использовал неправильное пространство имен в моих маршрутах.

[System.Web.Http.Route("")] //Use this namespace for Web API 2 
[System.Web.Mvc.Route("")] 

[System.Web.Http.RoutePrefix("api")] //Use this namespace Web API 2 
[System.Web.Mvc.RoutePrefix("api")] 
+0

Спасибо за это - я пришел сюда после того, как вырвал волосы с помощью проблемы маршрутизации MVC (он оказался таким же, как у вас, но наоборот). Я не мог понять, почему один из моих контроллеров на сайте MVC не был поднят маршрутизацией. В конце концов я обнаружил, что он использует Http.Route вместо Mvc.Route. Еще раз спасибо. – Richiban

+0

Вы спасатель жизни –

+0

Пригвоздил его. Благодарю. – ih303

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