Giới thiệu:
Sau khi triển khai ứng dụng asp.net lên mạng, thế nào ứng dụng của chúng ta sẻ gặp 1 số lổi không mong đợi, chẳng hạn như thay đổi chuổi kết nối, sai mật khẩu trong chuổi kết nối ....
Một trong những số lổi đó, có thể chứa những thông tin nhạy cảm, mà có thể hacker cố gắng tìm ra lổi đó và tấn công website của chúng ta. Chính vì thể khi có lổi xãy ra, chúng ta không nên show hết các lổi đó, mà chúng ta should chuyển hướng user sang 1 trang khác, chứa thông điệp lổi đó.
Chẳng hạn khi chúng ta input giá trị không hợp lệ trên URL (Query String Injection)
Tất cả các lổi hiển thị hết cho end user

Nếu sử dụng custom error thì chúng ta sẻ redirect end user sang 1 trang lổi do mình định nghỉa.

Khi đó URL của ứng dụng chúng ta cũng được chuyển sang trang Custom Error Page.

Cách làm:
Chúng ta có thể dể dàng cấu hình Custom Error Page trong web.config qua thẻ customErrors.
Đầu tiên chúng ta tạo 1 ứng dụng asp.net, ở đây mình đặt tên là CustomError

Sau đó mình thêm 1 page gọi là ErrorPage.aspx, khi có lổi xãy ra, end user sẻ được chuyển sang trang này. Và trong trang ErrorPage.aspx mình put đoạn text để thông báo có lổi xãy ra.
Opps ! Đả có lổi xãy ra trong quá trình thực thi xin vui lòng thực hiện lại.
Mở file web.config tìm đến dòng customErrors và thêm mode và defaultRedirect như hình sau:

Chú ý: Mode: Off luôn luôn hiển thị thông điệp lổi đến end user. On: định nghỉa 1 trang custom error và chuyển end user sang trang error này. RemoteOnly: mặc định được thiết lập trong file machine.config, sẻ hiển thị lổi to end user nếu được truy cập từ local, và redirect to end user nếu truy cập từ bên ngòai.
Xử lý lổi bằng cách lập trình
Tạo file Global.asax và viết code trong hàm Application_Error, chúng ta get mã lổi và rediect user sang trang thích hợp
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = HttpContext.Current.Server.GetLastError();
if (ex.InnerException != null)
{
ex = ex.InnerException;
log.Error(ex);
}
if (ex is HttpException)
{
if (((HttpException)ex).GetHttpCode() == 404)
{
Response.Redirect("~/PageNotFound.aspx");
}
else
{
Response.Redirect("~/ErrorPage.aspx");
}
}
HttpContext.Current.Server.ClearError();
}
History version:
√ 06/05/2009: Config custom error on web.config (dd/mm/yyyy)
√ 07/02/2010: Show error page by programmatically
Hope this help,
Neon Quach