除了简单地从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重写功能。

09-26 21:03