0

EinführungWie Aktion und Steuerung von URL verstecken: asp.net Mvc

ich auf Demo-Anwendung arbeite, wo Benutzer register.Users Tabelle „username“ field.There haben kann, ist „Detail“ -Aktion in " home "controller accepting parameter of string" Benutzername ".

-Code

public ActionResult Detail (string username) 
{ 
return View(); 
} 

Dann url sein

www.example.com/home/Detail?username=someparam

Problem

Kann ich eine Route so einrichten?

www.example.com/someparam

Wenn sein mögliches, dann lassen Sie mich bitte wissen. Jede Art von Hilfe oder Referenz wird geschätzt.

Danke für Ihre Zeit.

+1

Wenn Sie keine Routenbeschränkung erstellen, die jedes Mal nach der Datenbank sucht, wenn eine Anforderung gestellt wird (was zu einer schlechten Leistung führen würde), dann können Sie nicht. –

+0

@StephenMuecke danke für die Antwort, ich verstehe das Leistungsproblem.Sollte ich atleast Aktion einschließen? –

+1

Ja, Sie könnten eine Routendefinition wie 'url: Detail/{username} '' erstellen, die standardmäßig die 'Detail()' Methode in 'HomeController' ist (oder es könnte' Users/{username} 'oder irgendetwas anderes sein macht es einzigartig) –

Antwort

2

Das ist machbar, wenn Sie die Möglichkeit, Ihre Routen definiert ändern. Nehmen wir an, Sie verwenden dot net 4.5.2

Werfen Sie einen Blick in RouteConfig unter App_Start.

ist eine typische Route Definition wie folgt definiert:

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

Nichts hält von der Route zu ändern wie folgt aussehen:

routes.MapRoute(
name: "Default", 
url: "{id}", 
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

);

Wir sind im Grunde hardcoding der Controller und Aktion, um einen bestimmten Wert zu sein, so dass Sie jetzt nur URL/Parametername und es wird die hardcoded Kombination treffen.

Vor diesem Hintergrund sei ich nicht Dinge wie diese tun würde, wie es gegen die Art und Weise ist MVC

MVC Routen sind url/controller/action funktioniert. Sie können die Aktion für generische Dinge wie einen Index zum Beispiel überspringen und Ihre URL wird URL/Controller. MVC muss in der Lage sein, den Controller zu identifizieren, den Sie treffen wollen, und welche Aktion, und es ist am besten, innerhalb der Konventionen zu bleiben.

Plus, jede Anwendung wird in der Regel mehr als einen Controller haben, was eine nette Trennung von Bedenken ermöglicht. Jetzt haben Sie sich selbst mit nur einem Controller und einer Aktion fest programmiert.

Was Sie vorschlagen, kann viel einfacher in einer Webforms-Art getan werden, obwohl Sie das vielleicht untersuchen möchten.

+0

Ja, ich habe das bereits implementiert, danke für die Hilfe, +1 –

1

Wenn Sie definieren Code wie dieser

[HttpGet, Route("api/detail/{username:string}")] 
public ActionResult Detail (string username) 
{ 
return View(); 
} 

Dann url wird

www.example.com/api/Detail/someparam

Also ich Gast Sie definieren Folgendes versuchen Sie bitte mit Ihrem eigenen Risiko!

[HttpGet, Route("/{username:string}")] 

URL wird:

www.example.com/someparam

+0

Danke für die Hilfe, aber es impliziert auf api, +1 für die Mühe –