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?
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.
Jawapan mudah ialah menggunakan sifat HttpRequest.UserHostAddress .
Contoh: Dari dalam pengawal:
Contoh: Dari kelas pembantu:
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
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: