Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动在HTTP和HTTPS asp.net之间切换_Asp.net_Security_Ssl_Https_Webforms - Fatal编程技术网

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

自动在HTTP和HTTPS asp.net之间切换,asp.net,security,ssl,https,webforms,Asp.net,Security,Ssl,Https,Webforms,我使用的是asp.NETWebForms范例(api是用MVC中的APIController实现的)。我在IISExpress中添加了以下绑定 http://sarfraz-pc:80 https://sarfraz-pc:443 用这个。我可以使用http或https访问整个站点。现在,我想强制一些页面在http上运行,而另一些页面在https上运行。谷歌给了我一个很好的答案,另一个叫做 但我正在认真考虑使用模块来实现这一点。有人为此目的使用过URL重写吗?我不知道url重写的细节,所以我想

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

http://sarfraz-pc:80
https://sarfraz-pc:443
用这个。我可以使用http或https访问整个站点。现在,我想强制一些页面在http上运行,而另一些页面在https上运行。谷歌给了我一个很好的答案,另一个叫做


但我正在认真考虑使用模块来实现这一点。有人为此目的使用过URL重写吗?我不知道url重写的细节,所以我想问一下,采用这种方式有没有缺点?如果是,请建议一些替代方法(包括我提到的方法),但它不应该只是编写
响应。在应用程序中到处重定向
代码。

尽管它没有使用URL重写(我只有少量经验),但我们通过IIS中的自定义错误来处理它

  • 将自定义错误“403.4”(需要SSL)设置为URL,例如“/error/403_4.aspx”
  • 将目录设置为“需要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
Private子页面_Load(ByVal sender作为对象,ByVal e作为EventArgs)处理MyBase.Load
Dim url作为字符串=Request.url.Query
url=url。替换(“?403;”,“”)
Dim端口为String=String.Format(“:{0}/”,新Uri(url.port)
如果url.IndexOf(端口)-1,则
url=url.Replace(端口“/”)
如果结束
url=url.Replace(“http://”、“https://”)
重定向(url,True)
端接头

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

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

  • 将自定义错误“403.4”(需要SSL)设置为URL,例如“/error/403_4.aspx”
  • 将目录设置为“需要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
Private子页面_Load(ByVal sender作为对象,ByVal e作为EventArgs)处理MyBase.Load
Dim url作为字符串=Request.url.Query
url=url。替换(“?403;”,“”)
Dim端口为String=String.Format(“:{0}/”,新Uri(url.port)
如果url.IndexOf(端口)-1,则
url=url.Replace(端口“/”)
如果结束
url=url.Replace(“http://”、“https://”)
重定向(url,True)
端接头

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

将此代码添加到您的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);
   }
}

将此代码添加到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);
   }
}

你说得对:这不是我想要的。我会考虑如果有人告诉我URL重写不是针对这个目的的问题@穆罕默德,有兴趣看到关于URL重写我自己的回复。你说的对:这不是我所追求的。如果有人告诉我,URL重写并不意味着这个问题,穆罕默德会感兴趣地看到关于URL重写的回应。你不能用服务器端重定向来处理这个问题。必须重定向客户端。Marcus你确定吗?我的意思是,你已经通过了HTTPS,HTTP是在SSL/TLS之上分层的。一旦启动HTTP,它就不能突然变成HTTPS,反之亦然。它必须是一个新的连接,所以客户端必须参与。在视频中,演讲者谈到301永久重定向,我相信这是客户端重定向。否?请记住,如果那些HTTPS页面由经过身份验证的用户访问,那么您不应该向HTTP发出任何请求。事实上,身份验证cookie应该被标记为安全的,以确保它不会通过不安全的连接发送。更多信息:服务器端重定向无法处理此问题。必须重定向客户端。Marcus你确定吗?我的意思是,你已经通过了HTTPS,HTTP是在SSL/TLS之上分层的。一旦启动HTTP,它就不能突然变成HTTPS,反之亦然。它必须是一个新的连接,所以客户端必须参与。在视频中,演讲者谈到301永久重定向,我相信这是客户端重定向。否?请记住,如果那些HTTPS页面由经过身份验证的用户访问,那么您不应该向HTTP发出任何请求。事实上,身份验证cookie应该被标记为安全的,以确保它不会通过不安全的连接发送。更多信息:+1我不知道OP是否在寻找全局答案,但这演示了检测连接是否使用HTTPS的正确方法,如果没有,则重定向。虽然,它也允许不使用HTTPS的本地访问。+1我不知道OP是否在寻找全局答案,但这说明了检测连接是否使用HTTPS的正确方法,如果没有,则重定向。不过,它也允许不使用HTTPS的本地访问。