在基本控制器中获取用户 IP

本文关键字:获取 用户 IP 控制器 | 更新日期: 2023-09-27 18:37:08

>我正在制作一个base controller,我的其他controllers将从中继承,我想做的一件事是获取用户的IP Address并检查它是否是我想要的,如果不是,我想将它们重定向到主页。我在普通控制器中测试了代码,它工作正常,但是一旦我将代码移动到BaseController它就会出现Null Reference Exception错误。如何让它在我的基本控制器中工作?

using FFInfo.WebUI.Controllers;
using System.Web.Mvc;
namespace FFInfo.WebUI.Areas.Admin.Controllers
{
    public class AdminBaseController : GlobalBaseController
    {
        public AdminBaseController()
        {
            if (HttpContext.Request.ServerVariables["REMOTE_HOST"] != "ValidIP")
            {
                RedirectToAction("Index", "Home", new { area = "" });
            }
        }
    }
}

在基本控制器中获取用户 IP

在我看来

,现在在基构造函数中重定向还为时过早。在控制器初始化期间,您的 HttpContext 似乎为空,因此您可能会收到空引用异常。

我会寻找一种不同的方法,例如创建一个动作过滤器。并在您需要的地方使用它。您可以注册为全局过滤器或控制器级别等。像这样的东西。

    public class IpCheckFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext) {
        if (filterContext.HttpContext.Request.ServerVariables["REMOTE_HOST"] != "ValidIP")
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } });
        }
    }
    [IpCheckFilter]
    public class HomeController : AdminBaseController
    {
         public HomeController() : base()
         {            
         }
    }