2012-07-26 13 views
11

Ich habe beide benutzt gesehen und frage mich, ob sie das gleiche oder andere Dinge tun? Wenn es das Letztere ist, was ist der Unterschied?Soll ich RouteParameter oder UrlParameter für eine Asp.NET-Web-API-Route verwenden?

Ich versuchte es selbst zu beantworten, indem ich mir die Visual Studio MVC 4 (rc) Web API Vorlage anschaute, aber leider verwendet es beide, so dass meine Verwirrung bleibt. Hier ist, was die Vorlage enthält:

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 } 
     ); 
    } 
} 

Antwort

16

Verwenden RouteParameter für Web-Api Routen (.MapHttpRoute) und UrlParameter für Standard-MVC-Controller Routen (.MapRoute). Wie Sie wissen, sind die Standard-MVC- und Web-API 2 völlig verschiedene APIs in Bezug auf Assemblys und Namespaces, auch wenn beide ziemlich ähnlich sind. Sie könnten zum Beispiel Ihre Web-API selbst in einer Konsolenanwendung hosten, so dass Sie nicht einmal einen Verweis auf die System.Web.Mvc Assembly haben und Sie würden in diesem Fall natürlich RouteParameter verwenden.

+0

Aha .. Ich bemerkte nicht einmal, dass sie verschiedene Methoden auf dem Objekt routes aufgerufen hatten. Aber es macht Sinn. Ich frage mich, warum sie Ansichten und mvc Zeug in der Web-API-Vorlage enthalten. Hoffentlich werden sie bald mit der SPA-Vorlage fertig. Vielen Dank! :) – Mithon

+0

Es gibt auch ein anderes Verhalten zwischen zwei von diesen. Wenn Sie diesen Beitrag überprüfen: http://stackoverflow.com/questions/19043266/in-asp-net-webapi-does-routeparameter-optional-mean-optional-part-of-the-url UrlParameter.Optional wird nicht benötigt Sie können Standardparameter angeben, während RouteParameter.Optional dies tut. –

Verwandte Themen