2008-11-04 4 views
29

Wie erhalte ich die vollständige Anforderungs-URL (einschließlich Abfragezeichenfolge) in meinem Controller? Ist es eine Frage der Verkettung meiner URL und Formularparameter oder gibt es einen besseren Weg.Vollständige Abfrage-URL, einschließlich der Parameter im Controller

Ich überprüfte this Frage, aber es scheint nicht für MVC anwendbar.

Korrigieren Sie mich, wenn ich falsch liege.

Einige ausführlichere Informationen:

Mein Aufruf an meinen SearchController.AdvancedSearch() stammt aus einer Form mit etwa 15 optionalen Parametern. Wegen der Anzahl der Parameter und der Möglichkeit (optional), optionale Parameter sauber zu übergeben, entschied ich mich für eine Catchall-Zeichenfolge, die im Controller behandelt wird.

Jetzt möchte ich, dass mein Controller seinen Aufruf in einer Breadcrumb-Komponente speichert, so dass, wenn der Krümel angeklickt wird, das exakt gleiche Ergebnis abgerufen werden kann (mit allen, aber nicht mehr der Argumente). Um dies zu tun, brauche ich die gesamte Anfrage.URL, einschließlich der Querystring.

In Request.RawURL, request.URL etc ist diese Abfragezeichenfolge nicht enthalten. Tatsächlich mache ich gerade eine einfache Funktion.

String.Format("{0}/{1}", request.Url, request.form) 

Das gibt mir einige seltsame Ergebnisse (wie send Knopfwerte etc), aber es funktioniert. Wenn es Vorschläge gibt, wie man dies weniger von einem hässlichen Hack macht, erzähle es bitte.

Ich weiß, wo die aktuelle Anfrage zu finden, aber ich kann nicht scheinen, irgendwo eine rohe URL zu finden. Sie sind alle von der Querystring beraubt und ich brauche das auch.

Mein Controller aktualisiert eine Sammlung von URLs in meiner BreadCrumb Komponente. Daher benötigt es die Anforderungs-URL. Wie schlägst du vor, dass ich dieses Problem anwende?

Antwort

37

Sie können Request.Url.PathAndQuery verwenden.

MVC5: verwenden Request.RequestUri.PathAndQuery

+2

Heh, danke für Ihre Antwort, obwohl diese Frage wie 2 Jahre alt ist;) In der Zwischenzeit zwei weitere Versionen von MVC herausgekommen sind und optionale Parameter durch das MVC-Framework unterstützt werden, wodurch das Problem strittig. –

1

Sie können an der aktuellen Request-Objekt erhalten, indem Sie:

HttpContext.Current.Request 

jedoch Ich muss fragen - warum wollen Sie die URL? Dadurch haben Sie Ihren Controller vom Request-Objekt abhängig gemacht, wodurch Ihre Komponententests wesentlich schwieriger zu schreiben sind.

21
HttpContext.Current.Request.RawUrl 
HttpContext.Current.Request.QueryString 

Soweit Ihre zweite Frage. Anstatt die URLs zu verfolgen, fragen Sie nach den Informationen zu den Strings usw., zu denen Ihr Benutzer gegangen ist. Verfolgen Sie die aufgerufenen Controller und Aktionen. Das würde das Request-Objekt vollständig entfernen.

+0

Danke für die Antwort. Ich werde meine Frage aktualisieren, um meine Situation ein wenig klarer zu machen. Bitte guck dir das an. –

0

Innerhalb der Steuerung können Sie auf Request.RawUrl zugreifen.

+0

Danke für die Antwort, aber bitte.Rawurl enthält nicht die Querystring –

2
Request.RawUrl 

Mit dieser Eigenschaft ist es, die alle url zurück.