В проекте ASP.NET MVC, когда вы украшаете класс или метод с помощью [Авторизация] и авторизация завершается с ошибкой, сайт автоматически перенаправляется на страницу входа (используя loginUrl, указанный в web.config). Кроме того, что-то в структуре ASP.NET MVC проходит по исходному URL-адресу запроса в качестве параметра ReturnUrl.
Что несет ответственность за добавление этого ReturnUrl? Я не смог найти код для него в шаблоне проекта. Я также взглянул на код для AuthorizeAttribute в стеке исходного кода ASP.NET, но ничего не нашел. Я также попытался найти весь исходный код стека ASP.NET для "returnurl", но не смог найти что-либо.
Я прошу, что я обнаружил ошибку в этом процессе. Вы можете увидеть это с помощью нового интернет-проекта ASP.NET MVC. Установите тайм-аут FormsAuth на 1 минуту в файле web.config и войдите в систему. Подождите минуту и попытайтесь выйти. Это перенаправит страницу входа с помощью ReturnUrl of/account/logff, что приведет к 404 после входа в систему. Я уже работал над этим с помощью своего авторизованного атрибута:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
string returnUrl = null;
if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", System.StringComparison.CurrentCultureIgnoreCase))
returnUrl = filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", returnUrl }
});
}
}
}
Однако я хотел бы взглянуть на источник и посмотреть, могу ли я понять, почему эта ошибка существует, если она действительно является ошибкой.