除了简单地从HTTP重定向到HTTPS,RequireHttps属性还将我的URL的问号?
更改为%3F
。毫不奇怪,这会破坏事情。
为什么?我如何解决它?
场景:
我尝试导航到http://www.example.com/message/compose
但是,假设我没有查看该页面的权限。
<HandleError()> _
Public Class MessageController
Inherits System.Web.Mvc.Controller
Function Compose() As ActionResult
...
If ... Then
Throw New Exception(Net.HttpStatusCode.Unauthorized.ToString)
End If
...
Return View()
End Function
...
End Class
该操作将引发异常。
该异常由我的Error.aspx页处理
<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage(Of System.Web.Mvc.HandleErrorInfo)" %>
<script runat="server">
Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
If Model.Exception.Message = Net.HttpStatusCode.Unauthorized.ToString Then
response.redirect("/signin?ReturnUrl=" + Url.Encode(request.Path))
End If
...
End Sub
</script>
...
我已重定向到
http://www.example.com/signin?ReturnUrl=%2fmessage%2fcompose
的“登录”页面但是我使用的是HTTP,而不是HTTPS。我的动作需要HTTPS。 (该RemoteRequireHttps继承自RequireHttps,并重写其OnAuthorization方法以简单地忽略本地主机。)
<HandleError()> _
Public Class AccountController
Inherits System.Web.Mvc.Controller
<RemoteRequireHttps()> _
Function SignIn() As ActionResult
...
End Function
...
End Class
我已重定向到
https://www.example.com/signin%3FReturnUrl=%2fmessage%2fcompose
我在浏览器中看到此错误:
错误的请求
似乎RequireHttps将我的问号
?
更改为%3F
。 最佳答案
我们正在考虑使用ISAPI Rewrite之类的URL重写器在到达您的代码之前处理类似的事情。当然,这仅在您有权访问服务器时才有效。
另外,如果您使用的是IIS 7,我相信它具有内置的URL重写功能。