2016-03-21 5 views
4

Die Frage ist so einfach wie der Titel.Ist es möglich, einen Parameter vor der Aktion in der URL zu definieren

Ist es möglich, eine Route zu haben, die wie folgt aussieht: {controller}/{id}/{action}?

Dies ist, was ich in Code haben jetzt (nur eine einfache Funktion) (device mein Controller ist):

[HttpGet] 
[Route("Device/{id}/IsValid")] 
public bool IsValid(int id) { 
    return true; 
} 

Aber wenn ich auf die folgende URL gehen der Browser sagt, es ist nicht das finden Seite: localhost/device/2/IsValid.

Und wenn ich diese URL versuchen, funktioniert es ganz gut: localhost/device/IsValid/2

So ist es möglich, localhost/device/IsValid/2localhost/device/2/IsValid anstelle der Standard-Route zu benutzen? Und wie geht das?

Fühlen Sie sich frei, weitere Informationen zu fragen! Danke im Voraus!

+0

Sie benötigen Codein RouteConfig Datei zu ändern. public static void RegisterRoutes (RouteCollection-Routen) { routes.IgnoreRoute ("{Ressource} .axd/{* pathInfo}"); routes.MapRoute ( "Standard", // Routenname "{Controller}/{ID}/{Aktion}", // URL mit Parametern new {controller = "Home", action = "Index", id = ""} // Parameter Standard ); } –

+0

@RahulChavan Was ist 'th'? Und wo muss ich es hinzufügen? –

+0

RouteConfig Datei in App_start –

Antwort

4

Sie verwenden Attribut Routing. Stellen Sie sicher, dass Sie das Attribut-Routing aktivieren.

Attribute Routing in ASP.NET MVC 5

Für MVC RouteConfig.cs

public class RouteConfig { 

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

     routes.MapMvcAttributeRoutes(); 

     //...Other code removed for brevity 
    } 
} 

In Controller

[RoutePrefix("device")] 
public class DeviceController : Controller { 
    //GET device/2/isvalid 
    [HttpGet] 
    [Route("{id:int}/IsValid")] 
    public bool IsValid(int id) { 
     return true; 
    } 
} 
+0

Danke für Ihre Hilfe! : D Aber, warum "': int' "? Warum sollte ich das tun? –

+0

Es ist eine Einschränkung basierend auf Ihrer Probe. Es könnte genauso gut "bool" oder "long" gewesen sein. Dies ist der Fall, wenn Sie sicherstellen möchten, dass in der URL verwendete Typen dem gewünschten Typ entsprechen. Du musst es nicht tun. Lesen Sie den referenzierten Artikel. – Nkosi

+0

Ja, ich habe den Artikel gelesen. Vielen Dank! :) –

2

versuchen, dies mit vor Default Route in RoutingConfig

config.Routes.MapHttpRoute(
    "RouteName", 
    "{controller}/{id}/{action}" 
    ); 
Verwandte Themen