Asp.Net 中 HTTP 和 HTTPS 切换
Asp.Net 中 HTTP 和 HTTPS 切换
目的
HTTP,超文本传输协议,明文传输,无状态,服务器默认端口80HTTPS,具有SSL加密的HTTP,加密传输,需要申请ca证书,服务器默认端口443
虽然现在推行全站https协议,但是https比http更耗费资源,所以一部分网站还是实行部分http,一部分https,本文讲的就是如何在Asp.Net MVC项目中实现http和https的切换
步骤
1.如果项目需求是全站https的话,只需在控制器前使用特性RequireHttpsAttribute,他的文档为表示一个特性,该特性用于强制通过 HTTPS 重新发送不安全的 HTTP 请求。,就是所有请求都转化为https链接.
2.如果我们要实现部分http,部分https,就要创建一个新的特性,使其继承RequireHttpsAttribute
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Diagnostics;
namespace Https.Controllers.extends
{
public class SwitchHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
{
/// <summary>
/// 字段表示是否需要安全的https链接,默认不需要
/// </summary>
public bool RequireSecure = false;
/// <summary>
/// 重写验证方法,判断是否需要https,如果需要https,就交给父类的方法处理,如果不需要,就自己处理
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
if (RequireSecure)
{
//需要https,执行父类方法,转化为https
base.OnAuthorization(filterContext);
}
else
{
//如果设置为非安全链接,即http,进入该区块
//判断链接,如果为https,这转换为http
if (filterContext.HttpContext.Request.IsSecureConnection)
{
HandleNonHttpRequest(filterContext);
}
}
}
/// <summary>
/// 重写处理链接方法,处理https请求,使其重定向http
/// </summary>
/// <param name="filterContext"></param>
protected virtual void HandleNonHttpRequest(AuthorizationContext filterContext)
{
if (String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
// 从web.config中获取https的端口
string port =":"+ System.Configuration.ConfigurationManager.AppSettings["HttpPort"];
// redirect to HTTP version of page
string url = "http://" + filterContext.HttpContext.Request.Url.Host + port+ filterContext.HttpContext.Request.RawUrl;
//重定向
filterContext.Result = new RedirectResult(url);
}
}
}
}
2.http请求需要从web.config中获取端口,所以要添加配置,HostName为可选,HttpPost为该项目的端口.
<appSettings>
<add key="HostName" value="localhost"/>
<add key="HttpPort" value="8066"/>
</appSettings>
3.接下来可以在控制器中使用新的特性
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Https.Controllers.extends;
namespace Https.Controllers
{
public class HomeController : Controller
{
//[RequireHttps]
[SwitchHttps]
public ActionResult Index()
{
return View();
}
//[RequireHttps]
[SwitchHttps(RequireSecure = true)]
public ActionResult About()
{
return View();
}
}
}
4.调试项目,即可验证是否完成对http和https的控制.
5.发布应用,部署到IIS上的时候一个项目记得要绑定两个域名,分别为http和https.
Asp.Net 中 HTTP 和 HTTPS 切换的更多相关文章
- ASP.NET中常用的优化性能的方法
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...
- 在 ASP.NET 中创建数据访问和业务逻辑层(转)
.NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均 ...
- ASP.NET中的Session怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- 看stackoverflow大牛如何回答何时在ASP.NET中使用异步控制器?
转载自博客园:http://farb.cnblogs.com/ 今天无意中看到stackoverflow上一个很好的问答,个人觉得很有价值,所以翻译过来和大家共享!希望大家能相互交流. 在ASP.NE ...
- 在ASP.NET中如何运行后台任务
from:https://blogs.msdn.microsoft.com/scott_hanselman/2014/12/21/asp-net/ [原文发表地址] How to run Backgr ...
- ASP.NET中的Session怎么正确使用[转]
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- c#ASP.NET中页面传值共有这么几种方式
一.目前在ASP.NET中页面传值共有这么几种方式: 1.Response.Redirect("http://www.hao123.com",false); 目标页面和原页面可以在 ...
- 【转】asp.net中利用session对象传递、共享数据[session用法]
来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...
- ASP.NET中数据棒图,饼图,柱状图的实现
Web中绘制图形的方法大致有: 1. VML方式:功能强大,但是非常麻烦. 推荐:http://www.elook.net.cn/vml/ 2.使用控件:Dandus, Aspose.chart,Co ...
随机推荐
- 颜色选择器 rgb 与16进制 颜色转换
1. h5 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- AD原理图统一命名
1 Tools->Annotate Schematics 调出统一命名窗口 2 勾选要统一命名的原理图 3 Update Changes List 4 Accept Changes(creat ...
- Go语言学习之4 递归&闭包&数组切片&map&锁
主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...
- centos7: nginx安装配置
centos平台编译环境使用如下指令 安装make: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc ...
- MyEclipse6.5的反编译插件的安装
常用的几种反编译工具 1. JD-GUI[推荐] JD-GUI是属于Java Decompiler项目(JD项目)下个的图形化运行方式的反编译器.JD-Eclipse属于Java Decompiler ...
- windows如何简单安装mongodb
windows如何安装mongodb 步骤: 1.下载地址 2.选择zip(解压版本) 3.压缩文件解压到 /D:盘 4.在 D:盘 下建一个 data文件夹,data下建 db文件夹: D: ...
- 微信小程序页面内转发 按钮 转发
通过给 button 组件设置属性 open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage() 事件,如果当前页面没有定义此事件 ...
- 三种css样式表及其优先级
1.行内样式 body内: <p style="text-indent: 2em;color: red"> 我是行内样式 </p> 2.内部样式表 body ...
- Java对MongoDB中的数据查询处理
Java语言标准的数据库时MySQL,但是有些时候也会用到MongoDB,这次Boss交代处理MongoDB,所以讲代码以及思路记录下了 摸索的过程,才发现软件的适用还是很重要的啊!!! 我连接的Mo ...
- Spring AOP实现Mysql数据库主从切换(一主多从)
设置数据库主从切换的原因:数据库中经常发生的是“读多写少”,这样读操作对数据库压力比较大,通过采用数据库集群方案, 一个数据库是主库,负责写:其他为从库,负责读,从而实现读写分离增大数据库的容错率. ...