Tôi đang cố gắng xác thực yêu cầu HTTP nhận được bởi một dịch vụ. Tôi muốn kiểm tra xem tất cả các tiêu đề bắt buộc có mặt không. Nếu không, tôi muốn ném một ngoại lệ, ở một nơi nào đó, hãy đặt mã phản hồi thích hợp và dòng trạng thái của phản hồi. Tôi không muốn chuyển hướng người dùng đến bất kỳ trang lỗi cụ thể nào, chỉ cần gửi câu trả lời.Cách thích hợp để xác thực yêu cầu HTTP và trả về các phản hồi HTTP cụ thể trong Global.asax là gì?
Tôi tự hỏi tôi nên đặt mã ở đâu? Dự đoán đầu tiên của tôi là xác thực các yêu cầu trong Application_BeginRequest
, ném một ngoại lệ về lỗi và xử lý yêu cầu trong Application_Error
.
Ví dụ:
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;
}
}
Rõ ràng, trong những trường hợp như Visual Studio phàn nàn về một ngoại lệ unhandled trong Application_BeginRequest
. Nó hoạt động, vì mã đã cho được trả lại cho máy khách, nhưng tôi cảm thấy có gì đó sai với cách tiếp cận này.
[Chỉnh sửa]: Tôi đã xóa câu hỏi thứ hai về dòng trạng thái tùy chỉnh, vì những câu hỏi này không thực sự được kết nối.
Cảm ơn bạn đã trợ giúp.
WCF sẽ phát ở đâu? Bạn đang xây dựng một dịch vụ REST được lưu trữ trong IIS? –
Vâng, vâng. Tôi tin rằng đó là một trong các tùy chọn, trái ngược với việc lưu trữ một dịch vụ như một dịch vụ quản lý cửa sổ/ứng dụng được quản lý (theo msdn) –