|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我觉得这个学习方法很重要。初学者应该跟我一样有同样一个毛病。那就是急于求成。很想就自己做出个小小的系统来。可真要动手,却又茫然而不知所措。为什么会这样呢?因为我们没有耐心去学习基础知识。写根本看不到什么效果的测试代码。某些平安性较高的网页,如网上付出或用户上岸页面,大概会利用到https(SSL/TLS)来进步平安性。本文先容了怎样在ASP.NETMVC中强迫某action利用https和怎样举行向https页面的跳转。我们先完成强迫一个action利用https。这里写了一个RequireHttpsAttribute,它的感化是将非https毗连转换成https毗连,如许一切利用了RequireHttps这个filter的controller城市强迫利用https毗连。1usingSystem.Web.Mvc;
2
3namespaceSnowdream.Demo.RequireHttps
4{
5publicclassRequireHttpsAttribute:AuthorizeAttribute
6{
7///<summary>
8///重写OnAuthorization办法
9///</summary>
10///<paramname="filterContext"></param>
11publicoverridevoidOnAuthorization(AuthorizationContextfilterContext)
12{
13//假如已是https毗连则不处置,不然重定向到https毗连
14if(!filterContext.HttpContext.Request.IsSecureConnection)
15{
16//猎取以后哀求的Path
17stringpath=filterContext.HttpContext.Request.Path;
18
19//从web.config中猎取host,也能够间接从httpContext中猎取
20stringhost=System.Configuration.ConfigurationManager.AppSettings["HostName"];
21
22//从web.config中猎取https的端口
23stringport=System.Configuration.ConfigurationManager.AppSettings["HttpsPort"];
24
25//假如端标语为空暗示利用默许端口,不然将host写成host:port的情势
26if(port!=null)
27{
28host=string.Format("{0}:{1}",host,port);
29}
30
31//重定向到https毗连
32filterContext.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<addkey="HostName"value="localhost"/>
3<addkey="httpsPort"value="443"/>
4</appSettings>
5
HttpsPort能够不写,将利用默许的443。
然后在要利用https毗连的controller或action前加上[RequireHttps],如
1[RequireHttps]
2publicActionResultAbout()
3{
4returnView();
5}
6
如许,当我们用http://localhost/Home/About会见该页面时会主动跳到https://localhost/Home/About。可是如许另有一个成绩,网页中的链接都是http的,当点击进进必要利用https毗连的网页时都要举行一次Redirect。以是我们要将网页中的链接也改成https。这步不难,只必要将view中一切链接到https页面的Html.Action()利用得当的重载办法来写便可。ASP.NETMVC1.0RTM中供应了2种重载能够将protocol设置为https。在新建ASP.NETMVCWebApplication后默许天生的站点中,shared文件夹下有site.master文件中有个指向/Home/About的ActionLink。本来是
1Html.ActionLink("Home","Index","Home")
我们对其举行改写
1Html.ActionLink("About","About","Home","https","localhost","",null,null)
如许,天生出来的链接就是https的了,点击今后间接会利用https毗连而无需再举行一次Redirect,以后新的要到https页面的链接也可模仿次写法。
这里又要用到hostName信息,我们之前已将它写在web.config里了,以是能够专门写一个办法来猎取web.config中的这部分信息并拼接成这里必要的hostName字符串,大概还能够对HtmlHelper写一个扩大办法专门用于处置https的链接,这些能够在实践利用时做得当的优化。捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。 |
|