Alınan hataya bağlı olarak belirli görünümleri görüntülemem için hata işleme gerçekleştiren bir kodum var.C# MVC Başarılı Http Durum Kodunu Belirle
Benim kod şöyle görünür:
protected void Application_EndRequest()
{
var response = new HttpResponseMessage((HttpStatusCode)Context.Response.StatusCode);
if (!response.IsSuccessStatusCode)
{
var rd = new RouteData();
IController c = new ErrorController();
switch (response.StatusCode)
{
case HttpStatusCode.BadRequest:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "BadRequest";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
case HttpStatusCode.NotFound:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "NotFound";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
case HttpStatusCode.InternalServerError:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "InternalServerError";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
case HttpStatusCode.Forbidden:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "Forbidden";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
default:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "GenericError";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
}
}
Bu standart, http durum kodları için çalışır gibi belgelerinde tanımlandığı ve 200-299 tepki kodu ele almak doesnt ve geçer. Bununla birlikte, sorum şu, bunu yapmanın en iyi yolu bu mu?
Bu, 302 durum kodunu döndüren isteklerimden biri oldu - Bulundu. Şimdi, belgelere göre, bu başarılı bir kod olarak sınıflandırılmayacak, ancak nasıl başarılı olarak sınıflandırılamayacağını göremiyorum.
Bu nedenle, sadece 200-299 yerine tüm başarılı kodları hesaba katmak için bunu yapmanın daha iyi bir yolu var mı?
Teşekkürler Herhangi bir girdi ve fikir için teşekkürler. Anladığım kadarıyla bunun kesin bir cevabı olmayabilir.
eğer deyimi değiştirmektir orada 1 öneri olur koymak: 4xx kodları istemci hataları ve 5xx kodları sunucu hataları olarak tanımlanır olarak tanımlanır çünkü
if(!(statuscode >= 400 && statuscode <= 599)
budur. Bu nedenle hepsini yakalamalı mı?
Ama korkmuş 418 hakkında ne yapmalı? :)
Ben httpErrors kullanarak çalıştılar
DÜZENLEME: web.config'de
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear/>
<error path="/Error/NotFound" responseMode="ExecuteURL" statusCode="400"/>
</httpErrors>
yanı sıra customErrors:
<customErrors mode="On" defaultRedirect="~/Error">
<error statusCode="404" redirect="~/Error/NotFound" />
<error statusCode="403" redirect="~/Error/Forbidden" />
<error statusCode="500" redirect="~/Error/InternalServerError" />
</customErrors>
Hem hiçbir şans
Bunu sadece [web.config] 'da (http://benfoster.io/blog/aspnet-mvc-custom-error-pages) yapabileceğinizi biliyor musunuz? – Smudge202
IIS7 + kullanıyor musunuz? Varsa, yalnızca httpErrors ile çalışmayı deneyin. – Chris
Onları ayrı ayrı denedim. Iis – DaRoGa