Response.StatusCode'u el ile ayarladıysam IIS, yanıt içeriğimi geçersiz kılıyor


20

Sorun

Ben manuel olarak ayarlanan zaman HTTP Statusdiyelim ki, benim cevap akışının, 404ya 503, IIS stok yerine benim özel bakış, içerik / view IIS yukarı vermektedir.

Bunu web geliştirme sunucusu (AKA. Cassini ) ile yaptığımda doğru çalışıyor (yani, içeriğim görüntülenir ve response.statuscode== girilen verilerim).

Bu davranışı geçersiz kılabilmemin bir yolu var mı?

Nasıl Çoğaltılır

Varsayılan bir ASP.NET MVC1 web uygulaması yapın. Aşağıdaki rotayı ekleyin

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",
        "{*catchall}",
        new { controller = "Home", action = "Index" }
        );

}

Şimdi HomeController'ın Index yöntemini ...

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        Response.StatusCode = 404;
        return View();
    }
}

Yanıtlar:


18

Tamam - cevabı buldu. Beklediğim gibi, IIS 200 olmayan yanıtlarımı kaçırıyor. Emin değilim.

Neyse, işte anahtar söyle etmek IIS olduğu değil olmayan herhangi 200 durum sonucu kaynaklarını ele.

Nasıl? Web.config dosyasına yapılandırma girişi.

<system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"/>
    .... snipped other IIS relevant elements ... 
</system.webServer>

Şimdi, buradaki anahtar existingResponse="PassThrough". Bu kötü çocuk, HTTP durum kodu! = 200 ise IIS'ye kaynaklarımı yalnız bırakmasını söyler.

Daha fazla bilgi mi istiyorsunuz? Elbette: Bu IIS hakkında daha fazla bilgiyi Resmi IIS Web Sitesinde bulabilirsiniz .


httpErrors gibidir > 500 - - Hata Sayfaları> Düzenle Özelliği Ayarlar -> "Ayrıntılı Hatalar" _http:? //stackoverflow.com/questions/2640526/detailed-500-error-message-asp-iis-7-5_
Kiquenet

aaaahhh .. İyi ol 'IIS kolay işleri zorlaştırıyor :)
AR


-2

Genel olarak bu yaklaşıma dikkat edin. 404 durumu hakkında bir görünüm YAPMAMALISINIZ

  • Bir hata durum kodu döndürüldüğünde, IIS işleme kaydedilen durum hata sayfasını döndürür - işleme çıktı değil. Böylece, buraya bir HTML sayfası (veya bir aspx sayfasına bağlantı) koyabilirsiniz. http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx bir hata sayfasının nasıl ayarlanacağı konusunda güzel bir açıklamaya sahiptir.

  • Ama bu ilgisiz. Varsayılan olarak oldukça fazla sayıda tarayıcı bu çıktıyı GÖSTERMEZ, ancak tarayıcıda ayarlanmış bir şeyi gösterir. Dolayısıyla, 404 sayfanızı gören kullanıcılara güvenirseniz - bu gerçekleşmeyebilir. Onlar için tarayıcıda kurulmuş olan 404 sayfasını görebilirler.


1
Neden 404 ile ilgili bir görüş bildirmemeliyim? özel bir sayfa istiyorum ve sayfam (statik bir html hata sayfası yerine) bazı mantık gerektirebilir.
Pure.Krome

çünkü MVC modeli IIS hata sayfası modeliyle entegre değildir. Bu kadar basit. Bunun için IIS modeline geri dönmelisiniz. 404 vakası için bir sayfa URL'si kaydedin. Orada bazı dinamik sayfa koymak - bu gerçekten bir MVC url geri işaret olabilir emin değilim, ama MUSt 404 sayfa kayıt kökenlidir.
TomTom

Yanlış. Çoğu tarayıcı, 404 HTTP durumuyla döndürülen bir sayfanın içeriğini oluşturur. Hepsi değil, çoğu. Ayrıca, başka hiçbir modül daha sonra ardışık düzende geçersiz kılmadığı sürece IIS varsayılan olarak bir .NET sitesindeki herhangi bir kod tarafından ayarlanan durum koduna saygı gösterir. Bu durumda bunun nasıl olduğuna dair yazarın cevabına bakın.
Mufasa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.