Apakah cara untuk mendapatkan alamat IP pelanggan dalam ASP.NET MVC?
P粉232409069
P粉232409069 2023-10-14 09:01:56
0
2
692

Saya benar-benar baharu dengan timbunan ASP.NET MVC dan saya ingin tahu apa yang berlaku dengan objek Halaman mudah dan objek Request ServerVariables?

Pada asasnya, saya ingin mengekstrak alamat IP PC pelanggan, tetapi saya tidak dapat memahami bagaimana struktur MVC semasa mengubahnya.

Setahu saya, kebanyakan objek berubah telah digantikan dengan varian HttpRequest.

Adakah sesiapa yang sudi berkongsi beberapa sumber? Terdapat jumlah yang besar untuk dipelajari dalam dunia ASP.NET MVC. :)

Sebagai contoh, saya mempunyai kelas statik dengan fungsi semasa. Bagaimanakah saya boleh mencapai hasil yang sama menggunakan 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;
}

Bagaimana untuk memanggil fungsi ini dari halaman pengawal?

P粉232409069
P粉232409069

membalas semua(2)
P粉826283529

Request.ServerVariables["REMOTE_ADDR"] Harus berfungsi - terus dalam paparan atau dalam badan kaedah tindakan pengawal (Permintaan ialah hak milik kelas Pengawal dalam MVC, bukan Halaman). p>

Ia berfungsi..tetapi anda perlu menerbitkan pada IIS sebenar bukan IIS maya.

P粉903969231

Jawapan mudah ialah menggunakan sifat HttpRequest.UserHostAddress .

Contoh: Dari dalam pengawal:

using System;
using System.Web.Mvc;

namespace Mvc.Controllers
{
    public class HomeController : ClientController
    {
        public ActionResult Index()
        {
            string ip = Request.UserHostAddress;

            ...
        }
    }
}

Contoh: Dari kelas pembantu:

using System.Web;

namespace Mvc.Helpers
{
    public static class HelperClass
    {
        public static string GetIPHelper()
        {
            string ip = HttpContext.Current.Request.UserHostAddress;
            ..
        }
    }
}

Walau bagaimanapun, jika permintaan telah dihantar oleh satu atau lebih pelayan proksi传递> maka sifat alamat IP dikembalikan oleh HttpRequest.UserHostAddress akan menjadi alamat IP pelayan proksi terakhir yang menyampaikan permintaan itu.

Pelayan proksi boleh menggunakan standard de facto dengan meletakkan alamat IP pelanggan dalam pengepala HTTP X-Forwarded-For. Selain tiada jaminan bahawa permintaan itu mempunyai pengepala X-Forwarded-For, juga tiada jaminan bahawa X-Forwarded-For belum spoofed.


Jawapan asal

Request.UserHostAddress

Kod di atas menyediakan alamat IP pelanggan tanpa perlu mencari koleksi. Harta Permintaan tersedia dalam pengawal (atau paparan). Jadi, daripada menghantar kelas Halaman ke fungsi anda, anda boleh menghantar objek Permintaan untuk mendapatkan hasil yang sama:

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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan