在基本控制器中获取用户 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 = "" });
}
}
}
}
在我看来
,现在在基构造函数中重定向还为时过早。在控制器初始化期间,您的 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()
{
}
}