建立类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Iyibank.Core
{
public static class MyHttpContext
{
public static IServiceProvider ServiceProvider;
static MyHttpContext()
{ }
public static HttpContext Current
{
get
{
object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
HttpContext context = ((IHttpContextAccessor)factory).HttpContext;
return context;
}
}
}
}
Startup.cs添加如下
public void ConfigureServices(IServiceCollection services)内容下添加如下
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Configure修改如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,IServiceProvider svp)
Configure下添加以下内容
Iyibank.Core.MyHttpContext.ServiceProvider = svp;
这样在其他地方需要使用时,直接调用即可
/// <summary>
/// 获得当前页面客户端的IP
/// </summary>
/// <returns>当前页面客户端的IP</returns>
public static string GetIP()
{
//try
//{
string result = (MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"].ToString() != null
&& MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"] != String.Empty)
? MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"]
: MyHttpContext.Current.Request.Headers["REMOTE_ADDR"];
// string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(result))
result = MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(result) || !Utils.IsIP(result))
return "127.0.0.1";
return result;
//}
//catch
//{
// return "127.0.0.1";
//}
}