2009-10-28 8 views

ответ

1
Response.Clear()  
Response.Write("Access Denied") 
Response.StatusCode = 401; 
Response.End() 
+0

Отлично! , , , , ! – NibblyPig

+2

Это не сработает, если на выходе будут записаны другие материалы. По крайней мере, сделайте Response.Clear() заранее. Если вы хотите, чтобы стандартный HTTP-способ отказа в доступе, использование StatusCode - путь. –

+0

Совершенно верно (response.clear) –

29

Вы хотите вернуть HTTP код возврата 401 ("доступ запрещен")

Так,

Response.Clear(); 
Response.StatusCode = 401; 
Response.End(); 

должен сделать трюк

+0

Это, безусловно, лучший ответ. Другие приложения, запрашивающие вашу страницу, будут смотреть код состояния и быть в состоянии определить, что произошло. – ine

1

Чтобы отправить это раньше других вывода, у вас есть несколько вариантов.

Один, создайте модуль HTTPHandler, добавьте его в web.config. Это рассматривает события конвейера ASP.NET до того, как страница получит контроль, поэтому, если вы можете определить в тот момент, что вы не хотите, чтобы страница запускалась, вы можете отправить 401 до того, как страница что-либо сделает. Обработчик наследует IHTTPHandler, поэтому начните поиск по этому описанию интерфейса для документации.

Во-вторых, вы можете подключиться к событиям страницы PreInit и Init и отправить 401 до начала загрузки страницы. Так как класс страницы создаются в это время, вы можете также установить флаг в объекте страницы, что другие методы могут проверить, если страница отвечает с 401.

4

Я хотел бы сделать что-то вроде

throw new HttpException(401, "Access Denied"); 
0
HttpResponseMessage response = new HttpResponseMessage(); 
try{ 
    //try smth 
} 
catch (UnauthorizedAccessException UAEx){ 
    response = Request.CreateResponse(HttpStatusCode.Unauthorized, UAEx.Message); 
} 
return response; 
Смежные вопросы