2012-07-22 15 views
9

Was ist der beste Weg, um ASP.NET MVC Controller bedingt zu deaktivieren?Bedingte deaktivieren ASP.NET MVC Controller

ich einen Zugriff auf die Controller-Aktionen haben will, wenn einige Werte in web.config „true“ sind und 404, wenn es „false“

Soll ich mein eigenes Attribut schreiben?

UPDATE: der Suche nach elegantere Lösung als Action-Filter-Attribut (mit einer Fähigkeit Attributkonstruktor nicht konstanten Parameter zu übergeben)

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

Antwort

2

Am einfachsten wäre wahrscheinlich eine benutzerdefinierte Aktion Filter zu implementieren sein:

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

Sie können auch bedingt eine Route hinzufügen, dass die Steuerung übereinstimmt, die zur Folge hätte in einem 404 zurückgegeben wird.

+0

Dank. habe das Action Filter Attribut geschrieben (siehe mein Kommentar). aber vielleicht gibt es eine elegantere Lösung? –

+0

Ich kenne Ihren Zweck hier nicht, aber vielleicht ist es am besten, dies nicht auf Anwendungsebene zu tun? Ich denke, mit IIS URL-Rewrite-Modul zu Regeln für die Routen, die Sie 404 zurückgeben wollen, einrichten. Werfen Sie einen Blick auf die folgenden Beispiele: http: //blogs.iis.net/ruslany/archive/2009/04/ 08/10-url-rewriting-tipps-and-tricks.aspx – igz168

+0

nein. Ich muss eine Möglichkeit haben, es aus einer web.config-Datei zu wechseln. –

0

Kreuz Entsendung von: https://stackoverflow.com/a/43044667/257470

Meine Lösung zur Deaktivierung ApiController Controller:

  • Verwendet WebConfig AppSettings Config-Flag statt (#if DEBUG)
  • Vor Methode ExecuteAsync fängt den Aufruf und Kontrollen aufgerufen wird Feature umschalten (Merkmalsflag);
  • wenn Funktion deaktiviert ist, kehrt HTTP 410 GONE
  • Wenn es für viele Controller üblich ist, Basisklasse den Code Controllers bewegen

Der Code:

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