2012-07-26 8 views
11

He visto que ambos se usan y me pregunto, ¿hacen lo mismo o cosas diferentes? Si es el último, ¿cuál es la diferencia?¿Debo usar RouteParameter o UrlParameter para una ruta Asp.NET web-api?

Intenté responder yo mismo echando un vistazo a la plantilla de la API visual studio MVC 4 (rc), pero tristemente utiliza ambas, por lo que mi confusión persiste. Esto es lo que contiene la plantilla:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Respuesta

16

Uso RouteParameter para las rutas Web API (.MapHttpRoute) y UrlParameter por rutas estándar de controlador MVC (.MapRoute). Como sabe, MVC estándar y Web API son 2 API completamente distintas en términos de ensamblados y espacios de nombres, aunque ambas son bastante similares. Por ejemplo, podría autoasignar su API web en una aplicación de consola, por lo que ni siquiera tendrá una referencia al ensamblaje System.Web.Mvc y, por supuesto, usaría RouteParameter en este caso.

+0

Aha ... Ni siquiera me di cuenta de que habían llamado a diferentes métodos en el objeto de rutas. Pero tiene sentido. Me pregunto por qué han incluido vistas y elementos de mvc en la plantilla de API web. Espero que terminen con la plantilla de SPA pronto. ¡Gracias! :) – Mithon

+0

También hay un comportamiento diferente entre dos de estos. Si marca esta publicación: http://stackoverflow.com/questions/19043266/in-asp-net-webapi-does-routeparameter-optional-mean-optional-part-of-the-url UrlParameter.Optional no requerirá usted para especificar los parámetros predeterminados, mientras que RouteParameter.Optional lo hará. –