申请AccountController.LogOn
当试图在ASP.NET MVC 2预览应用[RequireHttps]到AccountController.Logon失败时在MVC预览2 2我得到以下错误:申请AccountController.LogOn
ASP.NET检测无效URL中的字符。
这是因为ASP.NET改写从
http://example.com/admin
我的要求
https://example.com/account/logon%3FReturnUrl=/admin
这是ASP.NET本身已加入ReturnURL
(不ASP.NET MVC)但它是RequireHttps
属性重定向和搞乱了URL。
%3F
而不是?
正在打破页面。
我认为它在技术上是ASP.NET中的一个错误。有没有解决方法? 我在想也许是一种方法来处理global.asax中'未经身份验证'的事件 - 或者可能只是修复RequireHttpsAttribute的源代码。
[RequireHttps]
public ActionResult LogOn()
{
return View(DefaultModel);
}
<authentication mode="Forms">
<forms loginUrl="~/account/logon"/>
</authentication>
这里有一个similar, but different question
编辑:我只是试图在http://example.com/accout/login?cat=dog
手动输入,它仍然重定向到一个无效的网址:account/logon%3Fcat=dog
。我原本以为这是与成员提供商和[RequireHttps]
之间的冲突有关,但它看起来只是一个基本的错误,所以我认为我必须自己修复源代码。
这似乎在ASP.NET MVC2 RC中已修复。
/admin
现在被改写为正确的网址:
/account/logon?ReturnUrl=/admin
假设这是在ASP.NET MVC 2预览2这个临时的错误是我所做的:
- 创建RequireHttps2类
-
应用[RequireHttps2]属性,而不是[RequireHttps]
公共类RequireHttps2Attribute:FilterAttribute,个IAuthorizationFilter {
public virtual void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (!filterContext.HttpContext.Request.IsSecureConnection) { HandleNonHttpsRequest(filterContext); } } protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext) { // only redirect for GET requests, otherwise the browser might not propagate the verb and request // body correctly. if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException("MUST USE SSL"); } // redirect to HTTPS version of page UriBuilder builder = new UriBuilder() { Scheme = "https", Host = filterContext.HttpContext.Request.Url.Host, Path = filterContext.HttpContext.Request.Path, Query = filterContext.HttpContext.Request.QueryString.ToString() // ORIGINAL CODE : Path = filterContext.HttpContext.Request.RawUrl // use RawUrl since it works with URL rewriting }; string url = builder.ToString(); filterContext.Result = new RedirectResult(url); }
}
我有完全相同的问题,但这是任何地方,我已经看到了解决它的唯一的帖子!谢谢。 – ChrisW 2009-12-22 20:21:31
你尝试过使用MVC 2 RC吗?如果不是,我们需要提交错误报告! – 2009-12-23 00:24:49