Обзор
В настоящее время я пытаюсь получить маршрутизацию атрибутов для работы с моими контроллерами 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);
}
}
Спасибо за это - я пришел сюда после того, как вырвал волосы с помощью проблемы маршрутизации MVC (он оказался таким же, как у вас, но наоборот). Я не мог понять, почему один из моих контроллеров на сайте MVC не был поднят маршрутизацией. В конце концов я обнаружил, что он использует Http.Route вместо Mvc.Route. Еще раз спасибо. – Richiban
Вы спасатель жизни –
Пригвоздил его. Благодарю. – ih303