5

ASP.NET MVC's Controller.HandleUnknownAction (string actionName) yöntemini geçersiz kılıyorum. Bir eylem bulunmazken ve bir HTTP yöntemine izin verilmediğinde çağrılır. İkisini nasıl ayırt edebilirim? Bir işlemin yapılmadığı ve bir yönteme izin verildiğinde 405 ve 405 döndürmek istiyorum.ASP.NET MVC: Denetleyici.HandleUnknownAction 404 veya 405?

cevap

3

Düşünebildiğim en basit yol, özel eylem filtresi oluşturmaktır. Bu yöntem

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); 
     } 
    } 
} 

Hatta, bunun daha genel sürümünü oluşturmak izin değilse çok 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); 
     } 
    } 
} 

gibi, http durum kodu sonuca dönmek için izin Ve

[AllowMethods("GET")] 
public ActionResult Index() 
{ 
    ViewBag.Message = "Welcome to ASP.NET MVC!"; 

    return View(); 
} 
gibi kullanacak

HttpVerbs parametresini parametre olarak almak size kalmış.