Я хотел бы создать страницу 401, если у пользователя нет правильного разрешения.
Пользователь запрашивает URL-адрес и перенаправляется на страницу входа (я запрещаю анонимность в web.config). Пользователь регистрируется успешно и перенаправляется на исходный URL-адрес. Тем не менее, при проверке разрешения определяется, что у пользователя нет необходимого разрешения, поэтому я хотел бы сгенерировать 401. Но проверка подлинности по формам всегда обрабатывает 401 и перенаправляет пользователя на страницу входа.
Для меня это неверно. Пользователь уже аутентифицирован, пользователь просто не имеет правильной авторизации.
В других сценариях, например, в сценарии службы ajax или REST, я определенно не хочу страницу входа в систему - мне нужна страница 401.
До сих пор я пробовал настраиваемый фильтр Authorize для возврата ViewResult с 401, но не работал. Затем я попробовал обычный Action Filter, переопределяющий 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.