zoukankan      html  css  js  c++  java
  • 利用ASP.NET MVC2进行网站验证

    在最近的项目中需要对业主的网站进行时间限制,故研究了一些方法,在此共享下,希望能在大家做同类事情的时候给一个思路。

      注册表权限,ASP.NET MVC2 Controller验证,ASP.NET MVC2 Filter页面过滤 

      保存时间信息的文件可以是注册表、XML、其他类型文件;本案列用的是在注册表读写;

    一、注册表权限

      注册表读写需要注意权限的问题,没有权限会引出System.IOException异常;

      解决方案:在注册表中增加权限,regedit进入注册表,右击【项】选择【权限】

      win7环境下

      

       添加IIS_IUSRS用户,赋予读写权限(windows2003环境下添加MO2用户)

       这样IIS就能取得注册表的读写权限了。

    二、ASP.NET MVC2 Controller验证

      编写一个Controller(客户端软件请求服务端时候首先先进此Controller进行验证),读取注册表时间信息后与服务器时间进行比较,False转至错误信息View,代码如下: 

    代码
     1  public class AuthActionController : Controller
     2     {
     3         public ActionResult Index()
     4         {
     5             month = RegEdit.Instance.GetRegValue("Month").ToString().Replace("0""").Trim();
     6             if (!String.IsNullOrEmpty(month)) {
     7                 TimeSpan ts = DateTime.Today - baseline;
     8                 days = ts.Days;
     9                 data = Convert.ToInt32(RegEdit.Instance.GetRegValue("Data").ToString());
               ... ... 
    30                 if (data > days || days > Convert.ToInt32(month)) {
    31                     verification = false;
    32                 } else {
    33                     verification = true;
    34                 }
    35             } else {
    36                 verification = false;
    37             }
    38 
    39             if (verification) 
    40             {
    41                 exc = RegEdit.Instance.ModifyRegEditData("Data", days.ToString());                
    42             }
    43 
    44             return Content(verification.ToString());
    45         }
    46 
                ......
    55     }

       但是,如果没有客户端软件只是一个网站的话,用户可以直接输入其他URL绕过验证,这样我们就需要用到Filter。

    三、ASP.NET MVC2 Filter页面过滤

      新建一个类继承ActionFilterAttribute类,覆写OnActionExecuting方法,代码如下

    代码
     1 public override void OnActionExecuting(ActionExecutingContext filterContext)
     2 {
     3     base.OnActionExecuting(filterContext);
     4     this.month = RegEdit.Instance.GetRegValue("Month").ToString().Replace("0""").Trim();
     5     if (string.IsNullOrEmpty(this.month))
     6     {
     7         this.verification = false;
     8     }
     9     else
    10     {
    11         TimeSpan span = (TimeSpan) (DateTime.Today - this.baseline);
    12         this.days = span.Days;
    13         this.data = Convert.ToInt32(RegEdit.Instance.GetRegValue("Data").ToString());
    14         this.zero = RegEdit.Instance.GetRegValue("Zero").ToString();
    15         string zero = this.zero;
    16         if ((zero != null&& (zero != "0"))
    17         {
    18             ......        
          }
    38         if ((this.data > this.days) || (this.days > Convert.ToInt32(this.month)))
    39         {
    40             this.verification = false;
    41         }
    42         else
    43         {
    44             this.verification = true;
    45         }
    46     }
    47     if (this.verification)
    48     {
    49         this.exc = RegEdit.Instance.ModifyRegEditData("Data"this.days.ToString());
    50         filterContext.HttpContext.Response.Write(this.exc);
    51     }
    52     else
    53     {
    54         this.RedirectToRoute(filterContext, new { controller = "Account", action = "LogOn" });
    55     }
    56 }
    57 
    58 

    在Controller的ActionResult上加上filter,代码如下:

    1     [MyFilter]
    2     public ActionResult Index()
    3     {
    4         base.ViewData["Message"= "Welcome to ASP.NET MVC!";
    5         return base.View();
    6     }

    这样就能对相关信息过滤,并指向对应的view上.

    转载时,请注明本文来源:www.cnblogs.com/tmywu

    作者邮箱:tommywu23@gmail.com 

  • 相关阅读:
    ascii、unicode、utf-8、gbk 区别?
    python递归的最大层数?
    线程
    为何基于tcp协议的通信比基于udp协议的通信更可靠?
    什么是局域网和广域网?
    通过代码实现如下转换 ?
    TCP和UDP的区别?
    什么是ARP协议?
    PEP8 常用规范
    b、B、KB、MB、GB 的关系?
  • 原文地址:https://www.cnblogs.com/tmywu/p/1745361.html
Copyright © 2011-2022 走看看