5

मैं अधिभावी कर रहा हूँ ASP.NET MVC के Controller.HandleUnknownAction (स्ट्रिंग actionName) विधि। इसे तब कहा जा रहा है जब कोई कार्रवाई नहीं मिलती है और जब एक HTTP विधि की अनुमति नहीं होती है। मैं दोनों के बीच अंतर कैसे कर सकता हूं? जब मैं एक विधि नोट की अनुमति देता हूं तो मैं 404 वापस करना चाहता हूं और कार्रवाई नहीं मिली है और 405।एएसपी.नेट एमवीसी: नियंत्रक। हैंडल अज्ञात एक्शन 404 या 405?

उत्तर

3

सबसे आसान तरीका मैं के बारे में सोच सकते हैं कस्टम क्रिया फिल्टर बनाने के लिए है। यह बहुत 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); 
     } 
    } 
} 

की तरह, विधि

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

या बेहतर, इसके बारे में अधिक सामान्य संस्करण बनाने के लिए अनुमति नहीं है यदि आप HTTP स्थिति कोड परिणाम लौटने की अनुमति देने और

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

    return View(); 
} 
की तरह उपयोग होगा

अनुकूलित HttpVerbs लेने के लिए के रूप में पैरामीटर आप पर निर्भर है विशेषता।

संबंधित मुद्दे