中成网站建设
    成都做网站,就选中成网站建设!专业四川网站建设,成都网站建设服务提供商
            企业宣传网站建设、电子商务网站建设、OA办公系统。联系电话:028-66165255
    资讯列表  
 ASP.NET防止用户多次登录的方法…
 生成不重复的随机整数
 ASP.NET获取IP的6种方法
 ASP dot net 里的状态管理-Ses…
 判断获取的参数是否为null
 中文验证码生成实例
 微软发布第二个实验版的.Net 4…
 微软轻量级Web开发平台WebMatr…
 asp.net 生成图片验证码
 Asp.net直接保存文件到客户端
 .Net开发中的多线程编程总结
 C#中关于get和set的详细例子介…
 ASP.NET编程技巧:提高asp.net…
 asp.net 剪切 缩小图片原码
 截断过长字符串为省略号算法
    资讯详情  
在 ASP.NET MVC 中使用 HTTPS
发布时间:2009-08-25                  来源:成都网站建设--中成网建         【加入收藏】
某些安全性较高的网页,如网上支付或用户登陆页面,可能会使用到https(SSL/TLS)来提高安全性。本文介绍了如何在ASP.NET MVC中强制某action使用https和如何进行向https页面的跳转。我们先实现强制一个action使用https。这里写了一个RequireHttpsAttribute,它的作用是将非https连接转换成https连接,这样所有使用了RequireHttps这个filter的controller都会强制使用https连接。

  1 using System.Web.Mvc;
 2 
 3 namespace Snowdream.Demo.RequireHttps
 4 {
 5     public class RequireHttpsAttribute:AuthorizeAttribute
 6     {
 7         /// <summary>
 8         /// 重写OnAuthorization方法
 9         /// </summary>
10         /// <param name="filterContext"></param>
11         public override void OnAuthorization(AuthorizationContext filterContext)
12         {
13             // 如果已经是https连接则不处理,否则重定向到https连接
14             if (!filterContext.HttpContext.Request.IsSecureConnection)
15             {
16                 // 获取当前请求的Path
17                 string path = filterContext.HttpContext.Request.Path;
18 
19                 // 从web.config中获取host,也可以直接从httpContext中获取
20                 string host = System.Configuration.ConfigurationManager.AppSettings["HostName"];
21 
22                 // 从web.config中获取https的端口
23                 string port = System.Configuration.ConfigurationManager.AppSettings["HttpsPort"];
24 
25                 // 如果端口号为空表示使用默认端口,否则将host写成host:port的形式
26                 if (port != null)
27                 {
28                     host = string.Format("{0}:{1}", host, port);
29                 }
30 
31                 // 重定向到https连接
32                 filterContext.HttpContext.Response.Redirect(string.Format("https://{0}{1}", host, path));
33             }
34         }
35     }
36 }
37 


由于https和https服务使用不同的端口号,而且https不能绑定主机头,只能通过不同端口的方式来区分各个站点,所以这里将host和port信息写到了web.config里,以方便配置。在web.config的appsettings节加入如下信息即可

 
1 <appSettings>
2     <add key="HostName" value="localhost"/>
3     <add key="httpsPort" value="443"/>
4 </appSettings>

HttpsPort可以不写,将使用默认的443。
然后在要使用https连接的controller或action前加上[RequireHttps],如

 
1 [RequireHttps]
2 public ActionResult About()
3 {
4     return View();
5 }

这样,当我们用http://localhost/Home/About访问该页面时会自动跳到https://localhost/Home/About。但是这样还有一个问题,网页中的链接都是http的,当点击进入需要使用https连接的网页时都要进行一次Redirect。所以我们要将网页中的链接也改成https。这步不难,只需要将view中所有链接到https页面的Html.Action()使用适当的重载方法来写即可。ASP.NET MVC 1.0 RTM中提供了2种重载可以将protocol设置为https。在新建ASP.NET MVC Web Application后默认生成的站点中,shared文件夹下有site.master文件中有个指向/Home/About的ActionLink。原来是

 
1 Html.ActionLink("Home", "Index", "Home")

我们对其进行改写

 
1 Html.ActionLink("About", "About", "Home", "https", "localhost", "",null, null)

这样,生成出来的链接就是https的了,点击以后直接会使用https连接而无需再进行一次Redirect,之后新的要到https页面的链接也可仿照次写法。
这里又要用到hostName信息,我们之前已经将它写在web.config里了,所以可以专门写一个方法来获取web.config中的这部分信息并拼接成这里需要的hostName字符串,或者还可以对HtmlHelper写一个扩展方法专门用于处理https的链接,这些可以在实际使用时做适当的优化。
 
 
上一篇:.net下实现URL重写,静态页面
下一篇:FCKeditor 2.3 在ASP.NET中文件上传路径...
【打印】    【关闭】    【字体变小】    【字体变大】

友情链接

首页  |  建站学院  |  网站建设  |  成功案例  |  业务体系  |  软件定制  |  解决方案  |  联系我们  |  免责声明
中成网建公司地址:四川省成都市双楠双安东巷1号18-3-5 电话:028-6616 5255 版权所有 @ 中成网建
成都网站建设网址:www.csccd.net www.csccd.cn 邮箱:web#csccd.net
信息产业部备案号:蜀ICP备08106559号