requireSsl mvc属性:使用returlUrl

时间:2009-12-01 22:24:30

标签: asp.net-mvc

我的帐户控制器上有[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中不起作用。

1 个答案:

答案 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 ());