2013-05-02 15 views
13

Come leggere le seguenti variabili del server in un controller ASP.NET Web API?API Web ASP.NET: come si leggono le variabili del server in un controller API Web?

HTTP_HOST 
SERVER_NAME 
REMOTE_HOST/REMOTE_ADDR 

vedo uno System.Net.Http.HttpRequestMessage richiesta definito, ma non vedo una collezione che contiene queste variabili.

Sto eseguendo un sito Web su un singolo IP con più intestazioni host e ho bisogno di determinare quale sito hanno usato per arrivarci.

EDIT:

ha finito per essere qualcosa di simile:

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

questo potrebbe essere quello che stai cercando: http://stackoverflow.com/questions/9565889/get-the-ip- indirizzo-dell'host remoto –

+1

@MajorByte Questo è molto simile sì. –

risposta

11

Le informazioni che state cercando è dipende l'host che si sta utilizzando e L'API Web è progettata per essere indipendente dall'host. Quindi ... le informazioni che stai cercando saranno sepolte nella collezione httpRequestMessage.Properties e saranno diverse a seconda dell'host.

Se si passa a utilizzare l'adattatore Owin, si otterrà un oggetto ambiente Owin standardizzato.

+0

Buoni suggerimenti. Riesco a vedere 'Request.Properties [" MS_HttpContext "]. Request.Url' insieme a UrlReferrer. La grande domanda è se rappresenti l'intestazione host del sito che hanno visitato. –

+0

Mi chiedo se http://msdn.microsoft.com/en-us/library/system.net.http.headers.httprequestheaders.aspx è un modo coerente di leggere queste informazioni indipendentemente dall'ambiente ospitato? –

+4

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

-11

Proprio come questo

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' non contiene una definizione per 'ServerVariables' e non è possibile trovare alcun metodo di estensione 'ServerVariables' che accetta un primo argomento di tipo 'System.Net.Http.HttpRequestMessage' (ti manca un utilizzo direttiva o un riferimento all'assembly?) –

+0

Puoi pubblicare il tuo codice sorgente. Inoltre, controlla di aver usato 'Sistema; utilizzando System.Web.Mvc; 'nella parte superiore del file –

+0

System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; Poiché si tratta di un'API MVC, non sembra che utilizzi il normale oggetto di richiesta –

2

sono stato in grado di tutte le informazioni dal RequestUri entro richiesta

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