zoukankan      html  css  js  c++  java
  • MVC5 关于路由的坑

    在写用户验证特性的时候照搬了一段网上的代码,把自己坑了两小时

     1 public class RequireLoginAttribute : AuthorizeAttribute
     2     {
     3         protected override bool AuthorizeCore(HttpContextBase httpContext)
     4         {
     5             bool Pass = false;
     6             if (!CheckUserIsLogin())
     7             {
     8                 httpContext.Response.StatusCode = 401;//无权限状态码  
     9             }
    10             else
    11             {
    12                 Pass = true;
    13             }
    14 
    15             return Pass;
    16         }
    17         protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    18         {
    19             base.HandleUnauthorizedRequest(filterContext);
    20             if (filterContext.HttpContext.Response.StatusCode == 401)
    21             {
    22                 if (filterContext.HttpContext.Request.HttpMethod.Equals("GET"))
    23                     filterContext.Result = new RedirectResult("~/Member/Login", true);
    24                 else
    25                 {
    26                     var script = "Poplogin()";
    27                     filterContext.Result = new JavaScriptResult() { Script = script };
    28                 }
    29             }
    30         }
    31 
    32         private bool CheckUserIsLogin()
    33         {
    34             string logintoken = CookieHelper.GetCookie(CookieKey.LoginToken);
    35             if (string.IsNullOrEmpty(logintoken)) return false;
    36             var _member = shopMemberBll.GetMemberByToken(logintoken);
    37             if (_member == null || SessionHelper.GetSessionUserView().MemCode != _member.memCode) return false;
    38             return true;
    39         }
    40     }
    View Code

    看似好像没什么问题,问题出在:

    filterContext.Result = new RedirectResult("~/Member/Login", false);

    因为RedirectResult第二个参数代表是否永久重定向

    导致浏览器缓存了重定向结果

    导致我在后来Action上移除特性,还是没法访问该方法,而且连断点也进不了。

    一开始怀疑是我代码写的问题,但是后来发现是和路由有关,查了一通百度没有任何提示。

    后来猜想可能和IIS对路由的缓存有关,因为同样访问Index页,两种路由访问,一个被重定向,另一个没有。

    最后,我把重定向的代码重看了一遍,发现RedirectResult和我平时的写法不一样才发现错误。

    下次抄代码一定得仔细点啊!!!

  • 相关阅读:
    Javascript 计时事件说明
    结合RibbonControl设计MDI窗体,在子窗体关闭后,顶部显示额外的控制栏残影
    交叉验证[转]
    [转载】我的数据挖掘之路 by wrchow
    《这些道理没有人告诉过你》摘记
    2017BUAA软工第0次作业
    SSM框架+slf4j 以Gradle实现
    RMQ(ST算法)
    博客园装饰
    【转载】UVa 11464 Even Parity 偶数矩阵
  • 原文地址:https://www.cnblogs.com/enigmaxp/p/5681937.html
Copyright © 2011-2022 走看看