Как правильно проверять HTTP-запросы и возвращать определенные HTTP-ответы в Global.asax?

Я пытаюсь проверить полученный HTTP-запрос сервисом. Я хочу проверить, присутствуют ли все требуемые заголовки и т. Д. Если нет, я хотел бы создать исключение, которое в каком-то месте установило бы правильный код ответа и строку состояния ответа. Я не хочу перенаправлять пользователя на какую-либо конкретную страницу с ошибкой, просто отправьте ответ.

Интересно, где мне поместить код? Мое первое предположение заключалось в том, чтобы проверять запросы в Application_BeginRequest , генерировать исключение при ошибке и обрабатывать его в Application_Error .

Например:

 public void Application_BeginRequest(object sender, EventArgs e)
 {
     if(!getValidator.Validate(HttpContext.Current.Request))
     {
         throw new HttpException(486, "Something dark is coming");
     }
 }

 public void Application_Error(object sender, EventArgs e)
 {
     HttpException ex = Server.GetLastError() as HttpException;
     if (ex != null)
     {
            Context.Response.StatusCode = ex.ErrorCode;
            Context.Response.Status = ex.Message;
     }
 }

Очевидно, в таких случаях Visual Studio жалуется о необработанном исключении в Application_BeginRequest . Это работает, поскольку данный код возвращается клиенту, но я чувствую, что с этим подходом что-то не так.

[Изменить]: Я удалил второй вопрос о настраиваемой строке состояния, поскольку эти вопросы на самом деле не связаны.

Спасибо за помощь.

7
задан Piotr Zierhoffer 24 August 2011 в 09:19
поделиться