2012-07-22 15 views
9

एएसपी.नेट एमवीसी नियंत्रक को सशर्त रूप से अक्षम करने का सबसे अच्छा तरीका क्या है?सशर्त रूप से एएसपी.नेट एमवीसी नियंत्रक को अक्षम करें

मैं अगर web.config में कुछ मूल्य "सही" है नियंत्रक कार्यों के लिए एक उपयोग कर सकते है करना चाहते हैं और 404 अगर यह "गलत"

मैं अपने ही विशेषता लिखना चाहिए है?

अद्यतन: (निर्माता का श्रेय देना स्थिर नहीं पैरामीटर पारित करने की क्षमता के साथ) कार्रवाई फिल्टर विशेषता की तुलना में अधिक सुरुचिपूर्ण समाधान के लिए खोज रहे

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] 
    public class CloseForSomeSettingAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      bool mySettingValue = MySettingManager.GetMySettingValue(); 

      if (mySettingValue) 
      { 
       filterContext.Result = new HttpStatusCodeResult(404); 
      } 
      else 
      { 
       base.OnActionExecuting(filterContext); 
      } 
     } 
    } 

उत्तर

2

सबसे आसान शायद एक कस्टम क्रिया फिल्टर लागू करने के लिए होगा:

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

तुम भी सशर्त एक मार्ग है कि कि नियंत्रक कि परिणाम होगा मेल खाता जोड़ सकते हैं 404 में लौटाया जा रहा है।

+0

धन्यवाद। एक्शन फ़िल्टर विशेषता लिखी है (मेरी टिप्पणी देखें)। लेकिन शायद कुछ और सुरुचिपूर्ण समाधान मौजूद है? –

+0

मुझे आपका उद्देश्य यहां नहीं पता है, लेकिन शायद यह सबसे अच्छा है कि यह आवेदन स्तर पर ऐसा न करें? मैं उन मार्गों के नियमों को सेट करने के लिए IIS url-rewrite मॉड्यूल का उपयोग कर सोच रहा हूं, जिन्हें आप 404 लौटने के लिए देख रहे हैं। नीचे दिए गए उदाहरणों पर नज़र डालें: http: //blogs.iis.net/ruslany/archive/2009/04/ 08/10-url-rewriting-tips-and-tricks.aspx – igz168

+0

नहीं। मुझे इसे web.config फ़ाइल से स्विच करने की क्षमता रखने की आवश्यकता है। –

0

क्रॉस पोस्टिंग से: https://stackoverflow.com/a/43044667/257470

ApiController नियंत्रक अक्षम करने के लिए मेरे समाधान: इससे पहले कि विधि ExecuteAsync अवरोध मंगलाचरण और चेक सुविधा शुरू हो जाती है

  • के बजाय (#if DEBUG)
  • WebConfig AppSettings config ध्वज का उपयोग करता है टॉगल (फीचर फ्लैग);
  • अगर सुविधा अक्षम है, रिटर्न HTTP 410 GONE
  • यदि यह कई नियंत्रकों के लिए आम है, नियंत्रक के आधार वर्ग के लिए कोड के लिए कदम

कोड:

public class TestController : ApiController 
{ 
    public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) 
    { 
     var featureFlag = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["EnableTest"]); 

     if (featureFlag == false) 
     { 
      return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Gone)); 
     } 

     return base.ExecuteAsync(controllerContext, cancellationToken); 
    } 
संबंधित मुद्दे