Я хотел бы создать страницу 401, если у пользователя нет необходимых прав.
Пользователь запрашивает URL-адрес и перенаправляется на страницу входа (я запретил анонимные действия в web.config). Пользователь успешно входит в систему и перенаправляется на исходный URL. Однако при проверке разрешений определяется, что у пользователя нет необходимых разрешений, поэтому я хотел бы сгенерировать 401. Но проверка подлинности с помощью форм всегда обрабатывает 401 и перенаправляет пользователя на страницу входа.
Для меня это не правильно. Пользователь уже аутентифицирован , у пользователя просто нет правильной авторизации .
В других сценариях, например в сценарии службы ajax или REST, я определенно не хочу страницу входа - мне нужна правильная страница 401.
До сих пор я пробовал собственный фильтр авторизации для возврата ViewResult с 401, но не работал. Затем я попробовал обычный фильтр действий, переопределяющий OnActionExecuting, который тоже не работал.
Что я смог сделать, так это обработать событие в global.asax, PostRequestHandlerExecute и проверить разрешение, а затем написать прямо в ответ:
if (permissionDenied)
{
Context.Response.StatusCode = 401;
Context.Response.Clear();
Context.Response.Write("Permission Denied");
Context.Response.Flush();
Context.Response.Close();
return;
}
Это работает, но это не совсем то, что я хочу.
Прежде всего, я даже не уверен, является ли это правильным событием или местом в конвейере, чтобы сделать это.
Во-вторых, я хочу, чтобы на странице 401 было немного больше контента. Предпочтительно, это должна быть страница формата aspx, возможно, с той же главной страницей, что и остальная часть сайта. Таким образом, любой, кто просматривает сайт, может увидеть, что в разрешении отказано, но с таким же внешним видом и т. Д., Но пользователь ajax или службы получит правильный код состояния для действия.
Есть идеи, как этого достичь?
Я видел другие посты с похожими запросами, но не нашел решения, которое мог бы использовать.
И нет, я не хочу 403.