ASP.NET MVC でクライアントの IP アドレスを取得するにはどうすればいいですか? 質問する

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;
}

コントローラー ページからこの関数を呼び出すにはどうすればよいでしょうか?

ベストアンサー1

簡単な答えは、HttpRequest.UserHostAddress プロパティ

例:コントローラー内から:

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;
            ..
        }
    }
}

しかし、リクエストが1人または複数人に渡された場合、プロキシサーバー次に返されるIPアドレスはHttpRequest.UserHostAddress プロパティリクエストを中継した最後のプロキシ サーバーの IP アドレスになります。

プロキシサーバーはクライアントのIPアドレスをX-転送先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;
}

おすすめ記事