2011-02-11 16 views
18

Bir sayfa içinde bir 404 hatası atmak mümkün olup olmadığını merak ediyordum (arkasındaki kod)? Ya da 408 (zaman aşımı) veya 401 (kimlik doğrulama gerekli) gibi başka bir tür hata sayfası bile atabilir misiniz?Bir ASP.Net sayfasında 404 hatası atmak mümkün mü?

Not: Sadece sayfanın 404 durum kodunu döndürmesini istemiyorum, ASP.Net (veya CustomErrors) 404 hata sayfasını kullanmasını istiyorum. kodda böyle

şey:

if(id>10){ //if id is greater than 10, then it doesn't exist here 
    throw 404Error(); 
} 

cevap

29

Bir HttpException atmak ve ilgili durum kodu ayarlayabilirsiniz:

throw new HttpException(404, "Not found"); 

Ayrıca diğer durum kodları ile birlikte çalışacaktır. Sadece 401 ile ilgili bir not: ASP.NET MVC'nin bu kodu tespit ettiği zaman muhtemelen sizin giriş sayfanıza yönlendirir ve 401 durum kodu için özel bir hata sayfası almak gerçek bir PITA olabilir.

+0

Hmm özel hata sayfaları kullanırken çok daha iyi atmak için gerek yoktur. CustomErrors kapalıyken bu özel durum atılmışsa, standart ASP.Net istisna sayfasını stacktrace ile gösterecek mi? – Earlz

+2

@Earlz, eğer customErrors = "Kapalı" ise muhtemelen bir YSOD alırsınız. –

+0

Sadece bir geliştirme ortamında merak ettim. Bu işe yarıyor gibi görünüyor! – Earlz

17

bir çok daha iyi yoludur:

'Throws a 404 Not found: 
Response.Clear() 
Response.StatusCode = 404 
Response.End() 

istisna ve yukarıdaki eserlerini web.config

+1

Ayrıca enumları System.Net.HttpStatusCode'da da kullanabilirsiniz. –

+2

'Response.End()' Klasik ASP'den bir geçiş olduğu için kaçınılmalıdır. Ağır yük ortamlarında hoş olmayan bir 'ThreadAbortException 'ortaya çıkarır. Bunun yerine 'HttpContext.Current.ApplicationInstance.CompleteRequest' öğesini çağırın ve gerekirse bir hata mesajı yazdıktan sonra' Response.SuppressContent = true' komutunu ayarlayın. – Dai

+0

Bu yanıt özellikle yararlıdır, çünkü Clear() ve End() çağrılarını ekleyerek kod parçasını içeriğe koyar. –