2016-09-06 3 views
0

Kann mir jemand über Attribut-Routing erklären. Ich habe eine Frage dazu.Attribut-Routing in MVC

Wenn ich "Nur" Attribut-Routing verwende, bekomme ich unter Fehler.

  1. Wenn URL ist "http://localhost:51254/":

HTTP-Fehler 403.14 - Verboten Der Web-Server so konfiguriert ist, nicht den Inhalt dieses Verzeichnisses auflisten.

  1. Wenn URL ist "http://localhost:51254/MyHome/HomeAction"

HTTP-Fehler 404.0 - Nicht die Ressource gefunden Sie suchen, hat entfernt, hatte seinen Namen geändert oder ist vorübergehend nicht verfügbar.

Mein Code in Controller:

[RoutePrefix("MyHome/{action}")] 
    public class IndexController : Controller 
    { 
     [Route("HomeAction")] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [Route("CallUs")] 
     public ViewResult ContactUs() 
     { 
      return View(); 
     } 
    } 

Und in RouteConfig.cs wie folgt aussehen:

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

Gibt es etwas falsch mit URL?
ich auf unterschiedliche Weise versucht, wie: http://localhost:51254/Index

http://localhost:51254/Index/Index

http://localhost:51254/HomeAction

http://localhost:51254/MyHome

http://localhost:51254/MyHome/HomeAction

Also, wenn ich Frage refraim dann wird es sein:
es ist verpflichtend convention based routing und objRouteCollection.mapRoute Methode zu verwenden? weil, wenn ich MapRoute Methode hinzufügen es funktioniert ziemlich gut.

Ich suchte, konnte aber nichts finden, das meine Frage beantwortet. Für das Beispiel msdn, c-SharpCorner

Antwort

2

Wenn ein Aktionsmethode mit der Route-Attribut versehen ist, kann es nicht mehr aus Konvention basiert Routen in RouteConfig.cs

MVC erwartet in RoutePrefix, sonst Zeichenkette definiert zugegriffen wird es Laufzeit geben Error. Tatsächlicher Fehler: "Eine direkte Route für eine Aktionsmethode kann den Parameter 'action' nicht verwenden. Geben Sie anstelle dieses Parameters einen Literalpfad an, um eine Route zu der Aktion zu erstellen." So entfernen Sie {action} von RoutePrefix. Nun, wenn Sie auf 'http://localhost:xxxxx/MyHome/HomeAction' zugreifen, sollte es funktionieren.

+0

Auch wenn ich nur Attribut-Routing verwende, dann muss ich jede Aktionsmethode mit 'Route' Attribut dekorieren. –

+0

Nicht notwendig. Sie können das Attribut-Routing und das konventionsbasierte Routing für die Aktionsmethoden eines einzelnen Controllers beliebig kombinieren.Einige Aktionsmethoden von einem Controller können Attribut-Routing haben (diese Methoden können nicht durch konventionsbasiertes Routing aufgerufen werden), und andere Aktionsmethoden desselben Controllers können durch konventionsbasiertes Routing aufgerufen werden (diese Methoden haben kein Attribut 'Route'). – Sarang