2008-10-20 4 views
32

Как вы можете видеть, это вопрос от не веб-разработчика. Я хотел бы иметь страницу ASPX, которая при определенных обстоятельствах может генерировать ошибку 401 из кода. В идеале это отобразило бы стандартную страницу IIS.Как сгенерировать ошибку 401 программно на странице ASP.NET

ответ

12

Вы должны иметь возможность использовать только следующее, согласно MSDN.

Throw New HttpException(401, "Auth Failed") 

Редактировать После просмотра других ответов код статуса будет более подходящим.

+3

Я попробовал это, и когда я проверил ответ HTTP в браузере, я получил 500 (Внутренняя ошибка сервера) вместо 401 (Несанкционированное) – dreamerkumar 2013-11-02 17:11:58

+0

Кроме того, не бросать исключения хуже с точки зрения производительности? – dreamerkumar 2013-11-02 17:13:01

+0

Мне действительно все равно, что предпочтительнее. Этот метод короче и легче запоминается, поэтому я его использую. – Brad 2016-05-20 18:26:43

51
Response.StatusCode = 401; 
Response.End(); 
38

Я думаю, что я до сих пор предпочитаю:

throw new HttpException(401, "Auth Failed") 

Я не думаю, что метод Response.StatusCode запускает пользовательские ошибки, определенные в файле web.config, например,

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"> 
    <error statusCode="401" redirect="AuthFailed.htm" /> 
    <error statusCode="403" redirect="NoAccess.htm" /> 
    <error statusCode="404" redirect="FileNotFound.htm" /> 
</customErrors> 

Выброс нового исключения определенно вызывает ошибки пользовательского интерфейса.

Кроме того, вы можете использовать средство регистрации ошибок на уровне приложения, например ELMAH или что-то в этом роде, и я не думаю, что там был бы зарегистрирован метод Response.StatusCode.

Примечание: Теперь я вижу, что в идеале должна отображаться стандартная страница ошибки IIS. Очевидно, что пользовательские страницы ошибок не нужны. В этом случае я бы использовал метод Response.StatusCode.

9

Один дополнительный комментарий.

Если часть страницы уже записана в выходной буфер, важно, чтобы вы очистили буферный контент, или страница может отображаться неправильно.

Это вполне вероятно, в шаблонной среде. например Мастер-страницы ...

Response.ClearContent(); 
Response.StatusCode = 401; 
Response.End(); 
Смежные вопросы