2012-03-27 2 views
3

Jetzt habe ich eine MVC-Anwendung unter http://127.0.0.1:8081/ ausgeführt (es wird tatsächlich im Azure-Computer-Emulator ausgeführt). In der Adresszeile des Browsers wird für die Portnummer eindeutig 8081 angezeigt.ASP.NET MVC: Wie erhalten Sie zuverlässig die echte URL der aktuellen Anfrage?

Aber Request.Url und Request.RawUrl beide geben mir http://127.0.0.1:8082/.

Ich muss eine E-Mail mit einer URL darin senden, also benötige ich den korrekten hostname und die Portnummer. Wie erhalte ich die tatsächliche, echte URL zuverlässig und ohne eine solche unerwartete Abweichung?

+1

http://stackoverflow.com/questions/7768232/request-url-port-giving-wrong-port –

Antwort

2

Sie können Request.Headers["Host"]; verwenden, die Ihnen den Hostnamen (oder IP) mit der richtigen Portnummer geben wird. Dann können Sie die URL rekonstruieren.

+0

Danke, das funktioniert für den Hostnamen und Portnumbe r - aber jetzt, wo ich weiß, was das zugrunde liegende Problem ist, mache ich mir Sorgen, dass das gleiche Problem mit dem Scheme passieren wird (a.k.a. Protokoll), das * nicht * Teil des Host-Headers ist ... :( – Timwi

+0

Solange es einen Load Balancer/Router (Azure) zwischen der Anfrage und dem Service gibt, ist diese Art von Port/IP-Änderungen immer möglich bei Ich kann mir keine globale Lösung vorstellen, um ehrlich zu sein. –

+0

(Die * korrekte * Lösung, offensichtlich, wäre, den Fehler in ASP.NET zu beheben, der die falsche Portnummer an erster Stelle setzt. Aber wegen overly -Religious Rückwärtskompatibilität, das wird nie passieren ...) – Timwi

0

In der Cloud als Azure kann Ihr Prozess überall mit einer beliebigen Portnummer ausgeführt werden. Die aktuelle Anfrage wird an den Prozess weitergeleitet.

deshalb haben Sie immer unterschiedliche Port-Nummer.

Es ist besser, dass Sie Ihren Domain-Namen in der Datei web.config angeben; Es wird immer für alle Anfragen gleich sein, wenn Sie aus der Konfigurationsdatei lesen.

3

Sie können auch verwenden:

Request.Url.Host 

oder verwenden (wenn Sie alle Initialen wollen und nicht nur den Host):

public ActionResult Index() 
{ 
string Domain = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host +  (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port); 
return View(Domain); 
} 

dies aus 'Reichlich-Code' genommen wurde
How to Retrieve the Current Domain in ASP.NET MVC?