Tôi đang ghi đè phương thức Controller.HandleUnknownAction (chuỗi actionName) của ASP.NET MVC. Nó được gọi khi một hành động không được tìm thấy và cũng có thể khi một phương thức HTTP không được phép. Làm thế nào tôi có thể phân biệt giữa hai? Tôi muốn trả lại 404 khi không tìm thấy hành động và 405 khi một phương thức được cho phép.ASP.NET MVC: Controller.HandleUnknownAction 404 hoặc 405?
5
A
Trả lời
3
Cách đơn giản nhất tôi có thể nghĩ là tạo bộ lọc tác vụ tùy chỉnh. Điều này sẽ cho phép bạn trả về kết quả mã trạng thái http nếu phương pháp không được phép
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);
}
}
}
Hoặc tốt hơn, tạo ra phiên bản chung chung hơn của nó, giống như 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);
}
}
}
Và sử dụng nó như
[AllowMethods("GET")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
Tùy chỉnh thuộc tính để thực hiện HttpVerbs làm thông số tùy thuộc vào bạn.
Các vấn đề liên quan
- 1. 404 Các trang trong ASP.NET MVC
- 2. MVC 4. IIS 7.5 PUT trở về 405
- 3. Lỗi 404 lạ trong ASP.NET MVC khi bao gồm "con"
- 4. ASP.NET MVC hoặc WebForms?
- 5. Umbraco hoặc ASP.NET MVC
- 6. Triển khai asp.net mvc beta lên iis 6 gây 404 của 404
- 7. Xử lý ASP.NET MVC 404 và IIS7 <httpErrors>
- 8. ASP.NET MVC Tuỳ chỉnh trang Lỗi (StatusCode 404 ném 500)
- 9. Cách trả lại 404 với chế độ xem asp.net mvc
- 10. Chuyển hướng đến trang 404 lập trình bằng asp.net MVC
- 11. ASP.NET MVC - HttpException hoặc xem lại?
- 12. Tìm hiểu Asp.Net WebForms hoặc Asp.Net MVC
- 13. Asp.net MVC json hoặc Json.net?
- 14. asp.net ashx request 404
- 15. ASP.NET MVC: Sử dụng Html.Partial hoặc Html.Action?
- 16. jQuery Mobile Directions ASP.NET hoặc MVC
- 17. Nhanh hơn asp.net mvc json hoặc json.net?
- 18. ném/trả lại một hành động 404 hoặc ngoại lệ trong Asp.net MVC và cho phép IIS xử lý nó
- 19. Tạo giao diện quản trị trong ASP.NET hoặc ASP.NET MVC
- 20. Trộn ASP.NET MVC vào ASP.NET WebForms
- 21. Làm thế nào để tạo các trang lỗi 404 tùy chỉnh trong ASP.NET MVC 3?
- 22. ASP.Net MVC 4 Gói
- 23. Tự động ném 404 lỗi khi thiếu các thông số cho asp.net MVC
- 24. MVC 4 Vùng API Web 404 Lỗi
- 25. ASP.NET MVC - Elmah không hoạt động và trả lại trang 404 cho elmah.axd
- 26. Nhận một 404 khi sử dụng .NET 4 trên IIS 6, có hoặc không có MVC
- 27. Tùy chỉnh HttpHandler không kích hoạt, trả lại 404 trong Ứng dụng ASP.NET MVC
- 28. Trở 400 chứ không phải 404 từ ASP.NET MVC Web API
- 29. ASP.NET/MVC 4 bundling và minification 404 vấn đề trên 64-bit IIS 7.5 server
- 30. Spring MVC vs ASP.NET (MVC?)