2009-11-06 3 views
0

При попытке применить [RequireHttps] для AccountController.Logon в ASP.NET MVC 2 Preview 2 я получаю следующее сообщение об ошибке:терпит неудачу в MVC Preview 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. Есть ли обходной путь? Я думаю, может быть, способ обработать событие «unauthenticated» в global.asax - или, возможно, просто исправить источник для RequireHttpsAttribute.

[RequireHttps] 
    public ActionResult LogOn() 
    { 
     return View(DefaultModel); 
    } 

    <authentication mode="Forms"> 
     <forms loginUrl="~/account/logon"/> 
    </authentication> 

Вот similar, but different question

Edit: Я просто попытался вручную ввести в http://example.com/accout/login?cat=dog и он по-прежнему перенаправлены на недействительный URL: account/logon%3Fcat=dog. Первоначально я думал, что это связано с конфликтом между провайдером членства и [RequireHttps], но это похоже на просто базовую ошибку, поэтому я думаю, что мне придется просто исправить источник самостоятельно.

ответ

1

Это отображается исправлено в ASP.NET MVC2 RC.

/admin 

Теперь перезаписывается на правильный URL:

/account/logon?ReturnUrl=/admin 
1

Предполагая, что это временная ошибка в ASP.NET MVC 2 Preview 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); 
    } 
    

    }

+0

У меня была точно такая же проблема, но это единственный пост в любом месте, что я видел, что обратился к нему! Благодарю. – ChrisW

+0

Вы пробовали с MVC 2 RC еще? если нет, нам нужно подать отчет об ошибке! –

Смежные вопросы