1

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

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

使用这篇很棒的文章。我可以使用 http 或 https 访问整个站点。现在,我想强制某些页面在 http 上运行,而其他页面在 https 上运行。谷歌给了我很多结果,包括来自代码项目的一个非常古老的解决方案和另一个名为Security Switch的解决方案。

但我正在认真考虑使用IIS 7.0 的 url 重写模块来实现这一点。有没有人为此使用过 URL 重写?我不知道详细的url重写所以我想问走这条路线有缺点吗?如果是,请提出一些替代方法(包括我提到的方法),但它不应该只是简单地Response.Redirect在应用程序中到处写代码。

4

2 回答 2

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);
   }
}
于 2012-07-12T12:15:56.427 回答
2

虽然它没有使用 URL 重写(我只有少量经验),但我们通过 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

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

于 2012-07-12T11:53:19.460 回答