Asp.Net 中 HTTP 和 HTTPS 切换
Asp.Net 中 HTTP 和 HTTPS 切換
目的
HTTP,超文本傳輸協(xié)議,明文傳輸,無狀態(tài),服務(wù)器默認(rèn)端口80HTTPS,具有SSL加密的HTTP,加密傳輸,需要申請ca證書,服務(wù)器默認(rèn)端口443
雖然現(xiàn)在推行全站https協(xié)議,但是https比http更耗費(fèi)資源,所以一部分網(wǎng)站還是實(shí)行部分http,一部分https,本文講的就是如何在Asp.Net MVC項(xiàng)目中實(shí)現(xiàn)http和https的切換
步驟
1.如果項(xiàng)目需求是全站https的話,只需在控制器前使用特性RequireHttpsAttribute,他的文檔為表示一個(gè)特性,該特性用于強(qiáng)制通過 HTTPS 重新發(fā)送不安全的 HTTP 請求。,就是所有請求都轉(zhuǎn)化為https鏈接.
2.如果我們要實(shí)現(xiàn)部分http,部分https,就要?jiǎng)?chuàng)建一個(gè)新的特性,使其繼承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鏈接,默認(rèn)不需要
/// </summary>
public bool RequireSecure = false;
/// <summary>
/// 重寫驗(yàn)證方法,判斷是否需要https,如果需要https,就交給父類的方法處理,如果不需要,就自己處理
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
if (RequireSecure)
{
//需要https,執(zhí)行父類方法,轉(zhuǎn)化為https
base.OnAuthorization(filterContext);
}
else
{
//如果設(shè)置為非安全鏈接,即http,進(jìn)入該區(qū)塊
//判斷鏈接,如果為https,這轉(zhuǎn)換為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為該項(xiàng)目的端口.
<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.調(diào)試項(xiàng)目,即可驗(yàn)證是否完成對http和https的控制.
5.發(fā)布應(yīng)用,部署到IIS上的時(shí)候一個(gè)項(xiàng)目記得要綁定兩個(gè)域名,分別為http和https.
總結(jié)
以上是生活随笔為你收集整理的Asp.Net 中 HTTP 和 HTTPS 切换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: primeng 中 pickList组件
- 下一篇: Python3+HTMLTestRunn