在HTTP和HTTPS asp.net之间自动切换

时间:2012-07-12 11:42:00

标签: asp.net security ssl https webforms

我在asp.net web forms范例(api用MVC的APIController实现)。我在IISExpress中添加了以下绑定

http://sarfraz-pc:80
https://sarfraz-pc:443

使用此great article。我可以使用http或https访问整个站点。现在,我想强制一些页面在http上运行,而其他页面在https上运行。 Google给了我lots of results,其中包括old solution from code project,另一个名为Security Switch

但我正在认真考虑使用IIS 7.0's url rewrite模块来实现这一点。有没有人为此目的使用URL重写?我不知道网址重写的细节,所以我想问一下这条路线有缺点吗?如果是,请建议一些替代方法(包括我提到的方法),但不应该只是在应用程序中编写Response.Redirect代码。

2 个答案:

答案 0 :(得分:4)

将此代码添加到您的global.asax文件中,以检查每个请求并即时转换。

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   if (HttpContext.Current.Request.IsSecureConnection.Equals(false) && HttpContext.Current.Request.IsLocal.Equals(false))
   {
    Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"]
+   HttpContext.Current.Request.RawUrl);
   }
}

答案 1 :(得分:2)

虽然它没有使用URL Rewrite(我只有少量的经验),但我们通过IIS中的自定义错误处理它。

  • 将自定义错误“403.4”(需要SSL)设置为诸如“/Error/403_4.aspx”之类的URL。
  • 将目录/目录设置为“需要SSL”。

然后进入403_4.aspx ...

Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  Dim url As String = Request.Url.Query
  url = url.Replace("?403;", "")
  Dim port As String = String.Format(":{0}/", New Uri(url).Port)
  If url.IndexOf(port) <> -1 Then
    url = url.Replace(port, "/")
  End If
  url = url.Replace("http://", "https://")
  Response.Redirect(url, True)
End Sub

我知道这不完全是你所追求的,但它比在代码中的多个位置重定向更好。