2013-05-02 9 views
13

Wie würden Sie die folgenden Servervariablen in einem ASP.NET Web API Controller lesen?ASP.NET-Web-API: Wie lesen Sie Servervariablen in einem Web-API-Controller?

HTTP_HOST 
SERVER_NAME 
REMOTE_HOST/REMOTE_ADDR 

Ich sehe einen System.Net.Http.HttpRequestMessage Antrag definiert, aber ich weiß nicht eine Sammlung enthält diese Variablen sehen.

Ich betreibe eine Website auf einer einzigen IP mit mehreren Host-Headern und ich muss feststellen, welche Website sie dort verwendet haben.

EDIT:

es so etwas wie das endete als:

((System.Web.HttpContextWrapper) Request.Properties["MS_HttpContext"]) 
    .Request.ServerVariables["HTTP_HOST"] 
+2

dies sein könnte, was Sie suchen: http://stackoverflow.com/questions/9565889/get-the-ip- address-of-the-remote-host –

+1

@MajorByte Das ist sehr ähnlich ja. –

Antwort

11

Die Informationen, die Sie suchen auf dem Host abhängig ist Sie verwenden, und Die Web-API ist Host-unabhängig. Also .... die Informationen, die Sie suchen, werden in der httpRequestMessage.Properties-Sammlung vergraben, und das hängt von Ihrem Host ab.

Wenn Sie den Owin-Adapter verwenden, erhalten Sie ein standardisiertes Owin-Umgebungsobjekt.

+0

Gute Vorschläge. Ich kann 'Request.Properties [" MS_HttpContext "]. Request.Url 'zusammen mit UrlReferrer sehen. Eine große Frage ist, ob es den Host-Header der besuchten Site darstellt. –

+0

Ich frage mich, ob http://msdn.microsoft.com/en-us/library/system.net.http.headers.httprequestheaders.aspx eine konsistente Möglichkeit zum Lesen dieser Informationen unabhängig von der gehosteten Umgebung ist? –

+4

((System.Web.HttpContextWrapper) Request.Properties ["MS_HttpContext"]). Request.ServerVariables ["HTTP_HOST"] –

-11

Genau wie dieser

using System; 
using System.Web.Mvc; 

public class MyController : Controller 
{ 
    public ActionResult Index() 
    { 
     var httpHost = Request.ServerVariables["HTTP_HOST"]; 
     // etc 
    } 
} 
+1

'System.Net.Http.HttpRequestMessage' enthält keine Definition für 'ServerVariables' und es konnte keine Erweiterungsmethode 'ServerVariables' gefunden werden, die ein erstes Argument vom Typ 'System.Net.Http.HttpRequestMessage' akzeptiert (fehlt eine Verwendung?) Direktive oder eine Assembly-Referenz?) –

+0

Kannst du deinen Quellcode posten? Überprüfen Sie auch, ob Sie 'using System; mit System.Web.Mvc; 'am Anfang der Datei –

+0

System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; Da es sich um eine MVC-API handelt, scheint es nicht das normale Request-Objekt zu verwenden. –

2

konnte ich alle diese Informationen aus dem RequestURI innerhalb Antrag

Request.RequestUri.Scheme + Uri.SchemeDelimiter + 
    Request.RequestUri.Host + (Request.RequestUri.IsDefaultPort ? string.Empty : (string.Concat(":", Request.RequestUri.Port))) 
Verwandte Themen