Estoy anulando el método Controller.HandleUnknownAction (string actionName) de ASP.NET MVC. Se invoca cuando no se encuentra una acción y también cuando no se permite un método HTTP. ¿Cómo puedo distinguir entre los dos? Me gustaría devolver un 404 cuando no se encuentra una acción y 405 cuando se permite un método.ASP.NET MVC: Controller.HandleUnknownAction 404 o 405?
5
A
Respuesta
3
La manera más simple que puedo pensar es crear un filtro de acción personalizado. Esto le permitirá volver de estado HTTP resultado de código si no se permite el método
public class HttpPostFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!(filterContext.RequestContext.HttpContext.Request.GetHttpMethodOverride().Equals("post", StringComparison.InvariantCultureIgnoreCase)))
{
filterContext.Result = new HttpStatusCodeResult(405);
}
}
}
Lo mejor es crear la versión más genérico de la misma, al igual que AcceptVerbsAttribute
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class AllowMethodsAttribute : ActionFilterAttribute
{
public ICollection<string> Methods
{
get;
private set;
}
public AllowMethodsAttribute(params string[] methods)
{
this.Methods = new ReadOnlyCollection<string>(methods);
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string httpMethodOverride = filterContext.HttpContext.Request.GetHttpMethodOverride();
if (!this.Methods.Contains(httpMethodOverride, StringComparer.InvariantCultureIgnoreCase))
{
filterContext.Result = new HttpStatusCodeResult(405);
}
}
}
y utilizarlo como
[AllowMethods("GET")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
El atributo de personalización para tomar HttpVerbs como parámetro depende de usted.
Cuestiones relacionadas
- 1. 404 Error ASP.NET MVC 3
- 2. 404 páginas en ASP.NET MVC
- 3. ASP.NET MVC 404 Manejo de errores
- 4. ruta ASP.NET MVC devolver 404 sin acción
- 5. MVC 4. IIS 7.5 PUT que devuelve 405
- 6. MVC ASP.NET o Razor
- 7. ASP.NET MVC o WebForms?
- 8. Error raro 404 en ASP.NET MVC al incluir "con"
- 9. Despliegue asp.net mvc beta en iis 6, causando 404
- 10. Diagnóstico de errores 404 en IIS 7 y ASP.NET MVC
- 11. lanzar automáticamente errores 404 cuando faltan parámetros para asp.net mvc
- 12. ASP.NET MVC 404 manejo e IIS7 <httpErrors>
- 13. ASP.NET MVC - HttpException o return view?
- 14. Redirecciona a la página 404 programáticamente usando asp.net MVC
- 15. ¿Por qué obtengo 404 cuando la ruta coincide? ASP.Net MVC
- 16. 404 Controlador de error Http en Asp.Net MVC (RC 5)
- 17. Aprenda Asp.Net WebForms o Asp.Net MVC
- 18. Asp.net MVC json o Json.net?
- 19. ASP.NET MVC: ¿Usar Html.Partial o Html.Action?
- 20. ¿Qué elegir: ASP.NET MVC o RESTful WCF?
- 21. ASP.NET MVC - TempData - Buena o mala práctica
- 22. jQuery Mobile Directions ASP.NET o MVC
- 23. .NET MVC o simplemente viejo ASP.NET?
- 24. ASP.NET MVC SEO URL
- 25. MVC 4 Web API Areas Error 404
- 26. Generación de interfaces de administración en ASP.NET o ASP.NET MVC
- 27. MVC Controller Index a veces 404?
- 28. En ASP.NET cómo identificar/procesar excepciones 404?
- 29. "Método 405 no permitido" - al utilizar ASP.NET jQuery ajax POST
- 30. ASP.NET MVC HandleError