2017-01-19 6 views
5

Ich verwende Attribute Routing in MVC4 Anwendung. Ich habe die Route auf [Route("test-{testParam1}-{testParam2}")] festgelegt. Hier kann {testParam2} das Wort "test" enthalten. Zum Beispiel, wenn ich eine URL wie folgt eingeben,Attribut-Routing funktioniert nicht in MVC4

Dies gibt mir 404 Fehler. Hier in der URL, hier {testParam2} hat zwei Wörter test tempparam2 formatiert zu test-tempparam2. Wenn test Wort ist letzte Position von {testParam2}, läuft es gut. Das bedeutet, wenn die URL wie läuft gut. Aber folgenden Fehler geben. .../test-temp-test-tempParam2.

Unten finden Sie den Code, der helfen kann ...

[Route ("test-{testParam1}-{testParam2}")] 
public ActionResult Foo (int testParam2) {...} 

Jetzt versuchen url folgenden zwei.

  1. localhost:(port)/test-temp-1

  2. localhost:(port)/test-test-temp-1

In meinem Fall gibt zweiten Fehler. In diesem Fall wird der erste Parameter von test temp zu test-temp formatiert. Das erste Mal läuft gut.

Wie löst man dieses Problem?

+0

Können Sie {} testparam2 als test_tempparam2 –

+0

einen Blick auf dieses Projekt auf GitHub haben. Es wird als kleines Paket verteilt. https://github.com/AtaS/lowercase-dashed-route – jvanrhyn

+0

@DhavalR bietet eine [mcve], die verwendet werden kann, um das Problem zu reproduzieren. Auf diese Weise kann man bessere Antworten finden. – Nkosi

Antwort

2

OP angedeutet, daß der letzte Parameter in der Streckenvorlage ist ein int

eine Route Einschränkung verwendet werden.

Mit Routenbeschränkungen können Sie die Übereinstimmung der Parameter in der Routenvorlage einschränken. Die allgemeine Syntax lautet {parameter:constraint}. Zum Beispiel:

[Route ("test-{testParam1}-{testParam2:int}")] 
public ActionResult Foo (int testParam2) {...} 

So, wenn Sie versuchen, zwei URLs zu folgen.

localhost:(port)/test-temp-1 

localhost:(port)/test-test-temp-1 

Die erste würde Routendaten {testParam1 = temp}-{testParam2 = 1}

Und das zweite Match Datenweg {testParam1 = test-temp}-{testParam2 = 1}

+0

Nun, ich habe gelernt über 'constraint' in' Attribute Routing'. Ihr Beispiel und Erklärung ist gut. Aber ich werde mit 'FrankFajardo's Kommentar gehen. Weil Ihr Code (URL) wie erwähnt funktioniert. Aber wenn es kommt, wenn '{tempParam1}' mehr als zwei Zeichen hat (z. B. temp-test-temp), wird ein Fehler ausgegeben. Wenn Sie URL wie 'test-temp-test-2' haben, wird es funktionieren. Aber wenn es "test-temp-test-temp-2" ist, wird es nicht funktionieren. Also musste ich meine Attribut Route ändern wie '~/{tempParam1} - {tempParam2}' oder 'test/{tempParam1} - {tempParam2}'. BTW Danke für deine Antwort und Erklärung. – DhavalR

0

Haben Sie das folgende Stück Code-Datei Global.asax in Ihnen passen würde?

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

    routes.MapMvcAttributeRoutes(); 

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