首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnActionExecuting循环MVC

OnActionExecuting循环MVC
EN

Stack Overflow用户
提问于 2016-08-29 14:54:00
回答 1查看 433关注 0票数 0

我正在使用动作过滤器在我的项目中做一项工作。我想这样做,如果用户的ip等于我的ip,它将转到索引,而不是看到登录页面。如果它的ip是不同的,我想把他重定向到登录页面。在登录页面中,我询问密码和id。我有一个问题,重定向到登录页面。这是我的代码,我如何修复这个循环呢?

过滤器

代码语言:javascript
复制
public class IntranetAction : ActionFilterAttribute
{
    private const string LOCALIP = "192.168";

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.RequestContext.HttpContext.Request;

        string ip1 = request.UserHostAddress;
        string shortLocalIP;
        if (ip1 != null && ip1.Contains("."))
        {
            string[] ipValues = ip1.Split('.');
            shortLocalIP = ipValues[0] + "." + ipValues[1];
        }
        else
        {
            shortLocalIP = "192.168";
        }

        //var ip2 = request.ServerVariables["LOCAL_ADDR"];
        //var ip3 = request.ServerVariables["SERVER_ADDR"];

        if (shortLocalIP != LOCALIP)
        {

            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Login", //TODO - Edit as per you controller and action
                action = "User"
            }));

        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Home", //TODO - Edit as per you controller and action
                action = "Index"
            }));
        }

        base.OnActionExecuting(filterContext);
    }
}

登录控制器

代码语言:javascript
复制
public class LoginController : Controller
{
    // GET: Login
    [IntranetAction]
    public ActionResult User()
    {         
        return View();
    }


    public void checkAuthentication(UserLoginInfo loginInfo)
    {         
        bool isAuthenticated = new LdapServiceManager().isAuthenticated(loginInfo);
        if (isAuthenticated)
        {

            //HttpContext.Response.Redirect("/Home/Index");
            Response.Redirect("/Home/Index");
            Response.End();
        }
        else
        {
            Response.Redirect("/", false);
        }         
    }
}

这是我的filter类中的循环。shortLocalIP不等于我的LOCALIP,它转到我的登录页面,但它转到inf循环

EN

回答 1

Stack Overflow用户

发布于 2016-08-29 15:04:24

我认为你需要在登录控制器中添加另一个视图Index

如果user ipyour ip相等,则转到Home/Index,否则转到Login/Index

您的startup视图将是Login/User,其中将放置您的filter

代码语言:javascript
复制
public class IntranetAction : ActionFilterAttribute
{
    private const string LOCALIP = "192.168";

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.RequestContext.HttpContext.Request;

        string ip1 = request.UserHostAddress;
        string shortLocalIP;
        if (ip1 != null && ip1.Contains("."))
        {
            string[] ipValues = ip1.Split('.');
            shortLocalIP = ipValues[0] + "." + ipValues[1];
        }
        else
        {
            shortLocalIP = "192.168";
        }

        //var ip2 = request.ServerVariables["LOCAL_ADDR"];
        //var ip3 = request.ServerVariables["SERVER_ADDR"];

        if (shortLocalIP != LOCALIP)
        {

            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Login", //TODO - Edit as per you controller and action
                action = "Index"
            }));

        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Home", //TODO - Edit as per you controller and action
                action = "Index"
            }));
        }

        base.OnActionExecuting(filterContext);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39200176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档