Próbuję sprawdzić poprawność żądania HTTP odebranego przez usługę. Chcę sprawdzić, czy wszystkie wymagane nagłówki są obecne itp. Jeśli nie, chciałbym rzucić wyjątek, który w pewnym miejscu ustawi odpowiedni kod odpowiedzi i linię statusu odpowiedzi. Nie chcę przekierowywać użytkownika do żadnej konkretnej strony błędu, wystarczy wysłać odpowiedź.Jaki jest właściwy sposób sprawdzania poprawności żądań HTTP i zwracania określonych odpowiedzi HTTP w pliku Global.asax?
Zastanawiam się, gdzie powinienem umieścić kod? Moim pierwszym przypuszczeniem było sprawdzenie poprawności żądań w Application_BeginRequest
, zgłoszenie wyjątku dotyczącego błędu i obsłużenie go w Application_Error
.
Na przykład:
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;
}
}
Najwyraźniej w takich przypadkach Visual Studio narzeka nieobsługiwany wyjątek w Application_BeginRequest
. Działa, ponieważ dany kod jest zwracany klientowi, ale czuję, że coś jest nie tak z tym podejściem.
[Edytuj]: Usunąłem drugie pytanie dotyczące niestandardowego wiersza statusu, ponieważ te pytania nie są naprawdę połączone.
Dzięki za pomoc.
Skąd wziąć udział WCF? Czy budujesz usługę REST hostowaną w IIS? –
Cóż, tak. Wierzę, że jest to jedna z opcji, w przeciwieństwie do hostingu usługi jako zarządzanej usługi Windows/zarządzanej aplikacji (zgodnie z msdn). –