我的帐户控制器上有[requireSsl]。
它似乎适用于除登录操作之外的所有操作。我相信这是因为登录操作被称为follws:
new { controller = "Account", returnUrl = HttpContext.Current.Request.RawUrl }
Account/Login?returnUrl...
Account/Login%3freturnUrl...
当更改为https时,第二行会导致错误请求。
编辑:问题是“?”字符转换为“%3F”。我也尝试用iis7中的url rewirte做同样的事情。那是什么原因以及如何解决?
更新:我确实让HTTPS使用IIS Rewrite,但不是如上所述的MVC。我删除了启用ssl并完全在iis中完成。我仍然想知道为什么它在mvc中不起作用。
答案 0 :(得分:2)
由于你所指出的,它不起作用:字符在不应该被编码时被编码。这是一个错误。
原始的RequireSslAttribute代码:
UriBuilder builder = new UriBuilder
{
Scheme = "https",
Host = filterContext.HttpContext.Request.Url.Host,
// gets encoded and shouldn't include the ?
Path = filterContext.HttpContext.Request.RawUrl
};
filterContext.Result = new RedirectResult (builder.ToString ());
应该改为
UriBuilder builder = new UriBuilder
{
Scheme = "https",
Host = filterContext.HttpContext.Request.Url.Host,
Path = filterContext.HttpContext.Request.Path,
Query = filterContext.HttpContext.Request.QueryString.ToString ()
};
filterContext.Result = new RedirectResult (builder.ToString ());