2016-11-01 3 views
0

erste Mal, dass ich auf Stack wie EmailWoher weiß MVC, welcher Controller aufgerufen werden soll, wenn sie nicht kommentiert sind?

meine Frage ist nicht über aspx Seiten, es geht um asp.net Kern MVC6 asp.net Kern ohne aspx Seiten tun können, reagieren, verwendet es Seiten Razor. Ein weiterer Grund, diese Frage nicht zu entfernen, ist, anderen Schülern wie mir zu helfen, die mit der gleichen Frage enden, wie ich später die richtigen Worte fand. Es gibt verschiedene Webseiten, auf denen Leute verwirrt darüber sind, und während ich Adept zu diesem neuen Konzept. Ich hoffe, du kannst die Frage weiterverfolgen, dass mehr Leute, die dem Microsoft Online-Kurs folgen, darüber stolpern können, wie auf dem Video nicht wirklich klar ist. (Es wird viel diskutiert, und das ist ein ziemlich großer Unterschied zwischen all den anderen Erklärungen in diesem Film).

An einem bestimmten Punkt in this course video haben sie einen Controller definiert, der auf eine URL reagiert. MVC versteht irgendwie, wenn Sie http://localhost/Scott anfordern, dass es die ScottController aufrufen sollte, die dann "hey es ist scott" zurückgibt.

Die Controller wie folgt aussehen:

namespace WebApplication1.Controllers // dont use controller minus S (controller) here 
{ 
    public class MariaController 
    { 
     public string Index() => "Hello from index mvc"; 
     public string Maria() => "Hello from Maria mvc"; 
    } 

    public class ScottController 
    { 
     public string index() 
     { 
      return "hey it's scott"; 
     } 
    } 
} 

Hinweis im Code oben gibt es keine [HttpGet("/Maria")] oder [HttpGet("/Scott")] Anmerkung, aber irgendwie dieser Code kennt, dass die Klasse ScottController auf die /Scott URL reagieren sollte, obwohl es doesn Habe keine "name property" oder so mit dem Wert "Scott", um zu überprüfen.

Ist es das mit Controller-Klassen, der Name "ScottController" ist aufgeteilt und Controller wird entfernt, so MVC kennt eine Klasse, die Anfragen an die /Scott URI behandelt?

+4

Es ist die MVC-Konvention. – Shyju

+1

Es verwendet Convention over Configuration. Werfen Sie einen Blick hier: http://www.danylkoweb.com/Blog/aspnet-mvc-convention-over-configuration-BU –

+1

Mögliche Duplikate von [Konvention über Konfiguration in ASP.NET MVC] (http://stackoverflow.com/questions/1072477/convention-über-Konfiguration-in-asp-net-mvc) – Clint

Antwort

1

Es ist genau umgekehrt, und alles hat mit Routing zu tun. Die Website-relative URI /Scott standardmäßig auf dieser Route Werte:

  • Controller: Scott
  • Aktion: Index

Dies ist wegen der Konventionen. Die Standardkonvention ist /{controller}/{action}, wobei die Aktion optional ist und standardmäßig Index lautet.

Also, wenn Sie anfordern, /Scott, MVC-Routing wird gehen und suchen Sie nach einem Controller mit dem Namen ScottController, alles wegen Konventionen. Siehe auch Why do MVC controllers have to have the trailing 'Controller' convention on their class name?

Da die Aktion in der Anforderungs-URI nicht vorhanden ist, wird sie versuchen, die Standardaktion mit dem Namen Index zu finden, die "hey it's scott" zurückgibt.

+0

, aber woher weiß er, dass Scott sich auf ScottController bezieht? verhält sich der Controller wie ein Wort, das zu dem hinzugefügt wird, was in der URL eingegeben wird? so http: // localhost/scott wird scot + controller = scottcontroller – user3800527

+0

Ja, das ist die Konvention. Siehe Bearbeiten. – CodeCaster

+0

Erstaunlich nie so etwas in einer anderen Programmiersprache gesehen. (und ich kenne eine ganze Reihe von Sprachen) Ich habe den Film 4 Mal oder so angeschaut, um zu sehen, ob ich etwas verpasst habe, aber ich konnte es nicht finden, und ich konnte auch nicht glauben, dass das Verteilen von Verben einer Programmiersprache die Antwort ist. .. es fühlt sich sehr seltsam an, fühlt sich an wie der Bruch einer Physikregel. – user3800527

Verwandte Themen