[解決済み】ASP.NET MVCでクライアントのIPアドレスを取得するにはどうすればいいですか?
質問内容
私はASP.NET MVCスタックの全くの初心者ですが、単純なPageオブジェクトとRequest ServerVariablesオブジェクトはどうなったのでしょうか?
基本的には、クライアントPCのIPアドレスを抜き出したいのですが、現在のMVCの構造がどのように変化したのか理解できません。
私が理解できる範囲では ほとんどの変数オブジェクトは、HttpRequestの亜種に置き換わっています。 .
どなたか、リソースを教えてください。ASP.NET MVCの世界では学ぶべきことが本当に山ほどあるんです。)
例えば、私はこのような現在の関数を持つ静的なクラスを持っています。ASP.NET MVCを使用して同じ結果を得るにはどうすればよいでしょうか?
public static int getCountry(Page page)
{
return getCountryFromIP(getIPAddress(page));
}
public static string getIPAddress(Page page)
{
string szRemoteAddr = page.Request.ServerVariables["REMOTE_ADDR"];
string szXForwardedFor = page.Request.ServerVariables["X_FORWARDED_FOR"];
string szIP = "";
if (szXForwardedFor == null)
{
szIP = szRemoteAddr;
}
else
{
szIP = szXForwardedFor;
if (szIP.IndexOf(",") > 0)
{
string [] arIPs = szIP.Split(',');
foreach (string item in arIPs)
{
if (!isPrivateIP(item))
{
return item;
}
}
}
}
return szIP;
}
また、コントローラページからこの関数を呼び出すにはどうすればよいのでしょうか?
どのように解決するのですか?
簡単な答えは HttpRequest.UserHostAddress プロパティ .
例 Controllerの中から。
using System;
using System.Web.Mvc;
namespace Mvc.Controllers
{
public class HomeController : ClientController
{
public ActionResult Index()
{
string ip = Request.UserHostAddress;
...
}
}
}
例 ヘルパークラス内から
using System.Web;
namespace Mvc.Helpers
{
public static class HelperClass
{
public static string GetIPHelper()
{
string ip = HttpContext.Current.Request.UserHostAddress;
..
}
}
}
BUT, リクエストが1つ以上引き継がれている場合。 プロキシサーバー によって返されるIPアドレスは HttpRequest.UserHostAddressプロパティ は、リクエストを中継した最後のプロキシサーバーのIPアドレスになります。
プロキシサーバー メイ を使用します。 デファクト の中にクライアントの IP アドレスを入れるのが標準です。 X-Forwarded-Forの場合 HTTPヘッダーです。リクエストがX-Forwarded-Forヘッダを持つという保証はありませんが、X-Forwarded-Forが スプーフィング .
オリジナル回答
Request.UserHostAddress
上記のコードでは、コレクションを検索することなく、クライアントのIPアドレスを提供しています。Request プロパティはコントローラ (またはビュー) 内で使用できます。したがって、関数に Page クラスを渡す代わりに、Request オブジェクトを渡して同じ結果を得ることができます。
public static string getIPAddress(HttpRequestBase request)
{
string szRemoteAddr = request.UserHostAddress;
string szXForwardedFor = request.ServerVariables["X_FORWARDED_FOR"];
string szIP = "";
if (szXForwardedFor == null)
{
szIP = szRemoteAddr;
}
else
{
szIP = szXForwardedFor;
if (szIP.IndexOf(",") > 0)
{
string [] arIPs = szIP.Split(',');
foreach (string item in arIPs)
{
if (!isPrivateIP(item))
{
return item;
}
}
}
}
return szIP;
}
関連
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] .NETコンソールアプリケーションでアプリケーションのパスを取得するにはどうすればよいですか?
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み】ASP.NET MVC 3 - 部分テンプレートと表示テンプレートと編集テンプレート
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] 関数を終了するには?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] ASP.NETでユーザーのクライアントIPアドレスを取得する方法は?