Как удалить ReturnUrl из адреса браузера - PullRequest
2 голосов
/ 30 марта 2010

Теперь при несанкционированной попытке доступа к действию мое приложение ASP.NET MVC перенаправляет пользователя на страницу входа и генерирует URL, показанный ниже:

http://www.mysite.com/Account/Log?ReturnUrl=%2Ftest%2Fsampleaction

Итак, есть ли способ удалить эту строку из URL, но сохранить ее где-нибудь, чтобы иметь возможность перенаправить пользователя обратно после входа в систему?

Ответы [ 4 ]

4 голосов
/ 12 апреля 2010

Интересно, почему вы захотите это сделать? Возможно, вам надоели злоупотребления, чрезмерные оргии параметров URL, и вам нравится чистый стиль URL RESTful и элегантный способ его реализации с помощью новой функции маршрутизации ASP.NET.

Однако в данном случае это именно то, для чего предназначены параметры URL. Это совсем не плохая практика или плохой стиль. И нет абсолютно никаких причин применять SEO-колдовство на своей странице входа. Так почему же вы должны сделать этот процесс менее надежным для пользователя, требуя состояния сеанса напрямую (или косвенно через TempData) или другого обходного пути?

0 голосов
/ 30 марта 2010

Перед перенаправлением в хранилище действий URL-адреса хранилища

TempData["redirect-url"] = "/requested/page/url";

при действии входа в систему прочитайте это значение и передайте его в представление входа в систему и поместите в скрытое поле.

0 голосов
/ 08 апреля 2010

Я бы реализовал атрибут авторизации

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);
        if (filterContext.Result is HttpUnauthorizedResult)
        {
            filterContext.HttpContext.Session["ReturnUrl"] = filterContext.HttpContext.Request.UrlReferrer.AbsoluteUri
            filterContext.Result = // Your login page controller;
        }

    }
}

Это не проверено, но может помочь вам найти ответ

Удачи вам, пожалуйста, предоставьте свое решение, когда найдете.

0 голосов
/ 30 марта 2010

Я хотел бы рассмотреть возможность реализовать свой собственный AuthorizationFilter и выполнить перенаправление.

public class AuthorizationFilter : IFilter
{
public bool Perform(ExecuteWhen exec, IEngineContext context,
IController controller, IControllerContext controllerContext)
{
if (context.CurrentUser.IsInRole("Administrator"))
{
return true;
}
context.Response.Redirect("home", "index");
return false;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...