有人说asp.net很简单,其实呢这只是表面现象。要把asp.net学的很深真的是一件不容易的事情,从开发的角度来说asp.net要方便一些,只是移植性差了一些。学过java之后再来学习就会觉得很简单,很快就可以上手。

下面就接着前面的博客写一个权限控制和内置对象相结合的小例子,这个例子在学校里可谓经典。所以我就借这个小例子来弄下。

1.开发一个用户登录表单,这里只有登录后的用户才能进入下载页面

 

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="downloadfile._Default" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" > 
  6. <head runat="server"> 
  7.     <title>用户登录</title> 
  8. </head> 
  9. <body> 
  10.     <form id="form1" runat="server" action="ashx/ToLogin.ashx"> 
  11.      用户名:<input type="text" name="fname"/><br /><br/> 
  12.      密码:<input type="password" name="password"/><br /><br/> 
  13.      <input type="submit" value="登录"/> 
  14.       <input type="reset" value="取消"/> 
  15.     </form> 
  16. </body> 
  17. </html> 

2.新建一个数据库文件,并创建一个数据表

asp.net权限控制_权限控制

3.添加一个数据集,后面会使用类型化dataset来查询数据库

 

asp.net权限控制_休闲_02

4.编写一般处理程序处理用户登录

 

  1. using System; 
  2. using System.Collections; 
  3. using System.Data; 
  4. using System.Linq; 
  5. using System.Web; 
  6. using System.Web.Services; 
  7. using System.Web.Services.Protocols; 
  8. using System.Xml.Linq; 
  9. using System.Web.SessionState; 
  10. using downloadfile.DataSetTeacherTableAdapters; 
  11.  
  12. namespace downloadfile.ashx 
  13.     /// <summary> 
  14.     /// $codebehindclassname$ 的摘要说明 
  15.     /// </summary> 
  16.     [WebService(Namespace = "http://tempuri.org/")] 
  17.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
  18.     public class ToLogin : IHttpHandler, IRequiresSessionState 
  19.     { 
  20.  
  21.         public void ProcessRequest(HttpContext context) 
  22.         { 
  23.             context.Response.ContentType = "text/plain"
  24.             string fname = context.Request["fname"]; 
  25.             string password = context.Request["password"]; 
  26.             m_teacherTableAdapter adpater = new m_teacherTableAdapter(); 
  27.            
  28.             var data = adpater.GetDataByFname(fname); 
  29.             var single = data.Single(); 
  30.           if (data.Count <= 0) 
  31.           { 
  32.               context.Response.Write("用户名不存在"); 
  33.           } 
  34.           else { 
  35.               //判断数据的唯一性,防止出现未知错误 
  36.              
  37.               //如果用户输入的密码和数据库的相同,则可以登录成功 
  38.               if (single.fpassword.Equals(password)) 
  39.               { 
  40.                   context.Session["status"] = "login"
  41.                   context.Session["username"] = fname; 
  42.                   context.Session["password"] = password; 
  43.                   context.Session["userid"] = single.fid; 
  44.                   //context.Response.Write("登录成功"); 
  45.                   context.Response.Redirect("../manage/allpicture.htm"); 
  46.  
  47.               }else
  48.                   context.Response.Redirect("../Default.aspx"); 
  49.               } 
  50.               
  51.           } 
  52.         } 
  53.  
  54.         public bool IsReusable 
  55.         { 
  56.             get 
  57.             { 
  58.                 return false
  59.             } 
  60.         } 
  61.     } 

5.编写图片的下载页面

 

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml" > 
  3. <head> 
  4.     <title>图片下载页面</title> 
  5. </head> 
  6. <body> 
  7.  <center> 
  8.    <div> 
  9.      <a href="../ashx/Download.ashx?filename=1.jpg">1.jpg</a> 
  10.      <a href="../ashx/Download.ashx?filename=2.jpg">2.jpg</a> 
  11.      <a href="../ashx/Download.ashx?filename=3.jpg">3.jpg</a> 
  12.      <a href="../ashx/Download.ashx?filename=4.jpg">4.jpg</a> 
  13.    </div>  
  14.  </center> 
  15.    
  16. </body> 
  17. </html> 

6.编写下载的处理程序,如果是普通用户则下载的图片加水印

 

  1. using System; 
  2. using System.Collections; 
  3. using System.Data; 
  4. using System.Linq; 
  5. using System.Web; 
  6. using System.Web.Services; 
  7. using System.Web.Services.Protocols; 
  8. using System.Xml.Linq; 
  9. using downloadfile.DataSetTeacherTableAdapters; 
  10. using System.Web.SessionState; 
  11. using System.Drawing; 
  12. using System.Drawing.Imaging; 
  13.  
  14. namespace downloadfile.ashx 
  15.     /// <summary> 
  16.     /// $codebehindclassname$ 的摘要说明 
  17.     /// </summary> 
  18.     [WebService(Namespace = "http://tempuri.org/")] 
  19.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
  20.     public class Download : IHttpHandler,IRequiresSessionState   
  21.     { 
  22.  
  23.         public void ProcessRequest(HttpContext context) 
  24.         { 
  25.             
  26.              
  27.            
  28.             //如果用户已经 
  29.             string status = (string)context.Session["status"]; 
  30.            
  31.            if (status!=null
  32.             { 
  33.                
  34.  
  35.                 
  36.                //取得文件名称 
  37.                string filename=context.Request["filename"]; 
  38.                 //设置消息头用来下载文件 
  39.                 context.Response.ContentType="application/octet-stream"
  40.                 context.Response.AddHeader("Content-Disposition"string.Format("p_w_upload;filename=\"{0}\"", filename)); 
  41.                 //从session取得登录用户的fid 
  42.                int fid=(int)context.Session["userid"]; 
  43.                 //根据用户id查询该用户的级别,根据级别获得不同的下载 
  44.                 //数据集 
  45.                
  46.                 //通过用户的id查询用户的级别 
  47.                 m_teacherTableAdapter adpater = new m_teacherTableAdapter(); 
  48.                 var data = adpater.GetDataById(fid); 
  49.                 var single = data.Single(); 
  50.                 if (single.level == 1) 
  51.                 { 
  52.                     //context.Response.WriteFile("../p_w_picpath/" + filename); 
  53.                     using (Bitmap bitmap = new Bitmap(context.Server.MapPath("../p_w_picpath/" + filename))) 
  54.                     { 
  55.                         using (Graphics gra = Graphics.FromImage(bitmap)) 
  56.                         { 
  57.                             gra.DrawString("免费下载"new Font("宋体", 20), Brushes.Red, 0, 0); 
  58.                             
  59.                         } 
  60.                         bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
  61.  
  62.                     }  
  63.                    
  64.                 } 
  65.                 else { 
  66.                     context.Response.WriteFile("../p_w_picpath/" + filename); 
  67.                 } 
  68.  
  69.  
  70.             } 
  71.             else 
  72.             { 
  73.                 context.Response.Write(status); 
  74.                 //context.Response.Write("请先登录"); 
  75.             } 
  76.            
  77.         } 
  78.  
  79.         public bool IsReusable 
  80.         { 
  81.             get 
  82.             { 
  83.                 return false
  84.             } 
  85.         } 
  86.     } 

7.程序的运行效果

 

asp.net权限控制_内置对象_03