c# - net - El enrutamiento de atributos ASP MVC 5 no registra rutas
route web api 2 c# (1)
Visión de conjunto
Actualmente estoy intentando que el enrutamiento de atributos funcione con mis controladores de API. No parece estar funcionando, y no estoy seguro de por qué. No estoy seguro de si me estoy perdiendo un paso crucial, o cuál podría ser el problema.
Problema
Intento pulsar localhost / api / user / custom? Test = 1 pero obtengo un 404 (espero que esto funcione)
Si presiono localhost / api / customapi? Test = 1, ingresé con éxito a mi método
¿Por qué la primera URL no funciona?
Preparar
Mi configuración es la siguiente:
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);
}
}
Estaba usando el espacio de nombres incorrecto en mis rutas.
[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")]