route net mvc examples attribute asp c# asp.net-mvc-5 attributerouting

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")]