ASP.NET MVC UnauthorizedResult добавление нежелательных параметров в URL входа - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть эта проблема в производственном приложении, где параметры строки запроса добавляются в URL перенаправления входа в систему. Чтобы воспроизвести это, создайте новый проект MVC (я тестировал и MVC2, и MVC3 R2). В HomeController добавьте следующее действие:

public ActionResult Break()
{
    return new HttpUnauthorizedResult();
}

Запустите приложение и нажмите /home/break?a=1&b=2. Так что это, естественно, должно перенаправить на /Account/LogOn?ReturnUrl=/home/break%3fa%3d1%26b%3d2, но фактически добавляет запрошенные параметры (&a=1&b=2) и в конец URL:

alt text

Почему это происходит? Нет необходимости добавлять эти параметры, поскольку закодированный URL в ReturnUrl имеет обязательные параметры. Я думал, что это будет что-то в производственном приложении, но если выполнить вышеуказанные шаги, приложение MVC по умолчанию также воспроизведет это. Любые мысли о том, как решить эту проблему, приветствуются.

1 Ответ

1 голос
/ 17 декабря 2010

Это сделано для того, чтобы действие LogOn получало доступ к исходным (не кодированным) значениям строки запроса.

Итак, учитывая URI

http://localhost:65183/Account/LogOn?ReturnUrl=/home/break%3fa%3d1%26b%3d2&a=1&b=2

Пара ключ / значение ReturnUrl - это URI для перенаправления после успешного входа в систему, и она содержит кодированные пары строк запроса из предыдущего запроса.

Чтобы изменить это поведение, вам нужно переопределить способ перенаправления.

protected void Application_EndRequest(object sender, EventArgs e)
{
    if (Response.RedirectLocation != null && Response.RedirectLocation.Contains("ReturnUrl"))
    {
        // change redirect URI
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...