2016-07-15 12 views
4

Edit # 2: config.FilePath zeigt, dass es eine andere Datei als erwartet sieht: "C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config ". Ich habe erwartet, dass es die web.config in meinem Projekt verwendet. Müssen herausfinden, warum das passiert.Reading AuthorizationSection von web.config bietet falsche Werte

Ich habe eine Methode in meiner Web-API, wo ich versuche, die Werte aus dem Autorisierungsabschnitt in meiner web.config zu lesen. Nach dem, was ich gefunden habe, sollte diese Arbeit:

public AuthorizationSetting GetAuthorizationSettings() 
    { 
     var config = WebConfigurationManager.OpenWebConfiguration(null); 
     var section = config.GetSection("system.web/authorization") as AuthorizationSection; 

     foreach (AuthorizationRule rule in section.Rules) 
     { 
      if (rule.Action.ToString().ToLower() == "allow") 
      { 
       Debug.WriteLine(rule); 
      } 
     } 

     return new AuthorizationSetting(); 
    } 

Und das ist der Abschnitt der web.config, die die Genehmigung Info enthält:

<system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <identity impersonate="true" /> 
    <authentication mode="Windows" /> 
    <authorization> 
     <allow roles="role1,role2,role3"/> 
     <deny users="*"/> 
    </authorization> 
    </system.web> 

Sie können sehen, dass es eine zulassen und man bestreitet es. Wenn ich den Code ausführe, scheint es, dass es nur eine Regel gibt. Sollte es nicht zwei geben, da es eine Erlaubnis und eine Ablehnung gibt? Und die eine Regel scheint eine Aktion von Erlauben und "*" für Benutzer zu haben. Das ist nicht in der web.config. Was fehlt mir hier?

enter image description here

** ** Bearbeiten Ich habe die Möglichkeit in Betracht gezogen, dass es eine andere Datei web.config liest. Aber es gibt nur eine andere Datei web.config in der Lösung (unter Ansichten). Ich habe es auch geändert, um den gleichen Autorisierungsabschnitt zu haben, aber ich bekomme immer noch das gleiche Ergebnis.

Antwort

1

Wie Sie bereits Null mit heraus in die path Parameter von OpenWebConfiguration lädt der Server root web.config in

%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\Config\ 

die Dokumentation sagt:

The virtual path to the configuration file. If null, the root Web.config file is opened.

aber man könnte annehmen, Es wäre die Root-Web-Konfiguration der Site, nicht der Server. Wie auch immer, versuche es mit:

var config = WebConfigurationManager.OpenWebConfiguration("~"); 
+0

Das hat es getan. Nicht sehr intuitiv. Vielen Dank. –