2013-05-02 7 views
13

ASP.NET Web APIコントローラで、次のサーバー変数をどのように読み込みますか?ASP.NET Web API:Web APIコントローラでサーバー変数を読み取るにはどうすればよいですか?

HTTP_HOST 
SERVER_NAME 
REMOTE_HOST/REMOTE_ADDR 

私は定義されてSystem.Net.Http.HttpRequestMessage要求を参照してください、私はこれらの変数を含むコレクションが表示されません。

私は、複数のホストヘッダーを持つ単一のIP上でWebサイトを実行しており、そこに到達するために使用したサイトを特定する必要があります。

EDIT:それはこのようなものになってしまっ

:あなたが探している情報は、使用しているホストに依存しているだけで、この

using System; 
using System.Web.Mvc; 

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

内RequestUriからすべての情報をことができました:http://stackoverflow.com/questions/9565889/get-the-ip-リモートホストアドレス –

+1

@MajorByteこれは非常に似ています。 –

答えて

11

よう

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

良い提案。私は 'Request.Properties [" MS_HttpContext "]。Request.Url'とUrlReferrerを見ることができます。大きな質問は、訪問したサイトのホストヘッダーを表すかどうかです。 –

+0

http://msdn.microsoft.com/en-us/library/system.net.http.headers.httprequestheaders.aspxが、ホストされている環境に関係なくこの情報を一貫して読み取ることができるのだろうか? –

+4

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

-11

とWeb APIはホストに依存しないように設計されています。だからあなたが探している情報はhttpRequestMessage.Propertiesコレクションに埋め込まれ、あなたのホストによって異なるでしょう。

Owinアダプタの使用に移行すると、標準化されたOwin環境オブジェクトが取得されます。

+1

'System.Net.Http.HttpRequestMessage'に 'ServerVariables'の定義がなく、 'System.Net.Http.HttpRequestMessage'タイプの最初の引数を受け入れる拡張メソッド 'ServerVariables'が見つかりませんでした。ディレクティブまたはアセンブリ参照?) –

+0

ソースコードを投稿できますか?また、 'using System;を使用していることを確認してください。 using System.Web.Mvc; 'ファイルの先頭にある –

+0

システム; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http;これはMVC APIなので、通常のリクエストオブジェクトを使用していないようです。 –

2

私は、これはあなたが探しているものかもしれない要求

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