无法为请求的Configuration对象创建Web API Configruation文件

时间:2016-07-29 06:35:31

标签: c# asp.net-mvc encryption asp.net-web-api

我正在尝试使用aspnet_regiis加密web.config文件中给出的连接字符串。 所以我试图将aspnet_regiis.exe打开为

  aspnet_regiis -pe "connectionStrings" -app "/NewTestAPI" -prov "RsaProtectedConfigurationProvider"

 aspnet_regiis -pe "connectionStrings" -app "/E:/Dropbox/NewTestAPI" -prov "RsaProtectedConfigurationProvider"

它抛出一个错误,说“无法为请求的Configuration对象创建配置文件。失败!”我甚至试过共享文件夹

enter image description here

 aspnet_regiis -pe "connectionStrings" -app "/\\ABC\NewTestAPI" -prov "RsaProtectedConfigurationProvider"

即使抛出同样的错误也无法为请求的Configuration对象创建Configruation文件。失败!“

以下是我的连接字符串

 <connectionStrings>
  <add name="ProConnection" connectionString="Data Source=J;User Id=T;Password=C;pooling=true;min pool size=5;Max Pool Size=60" providerName="Oracle.DataAccess.Client"/>
 </connectionStrings>

我也尝试过提供网站的物理路径以及网站ID,如图所示,但错误相同

enter image description here

aspnet_regiis -pe“connectionStrings”-app“/ E:\ Dropbox \ ABC \ TestAPI”-site“3”-prov“RsaProtectedConfigurationProvider”

1 个答案:

答案 0 :(得分:0)

初步回答

首先,您应确保授予对RSA加密密钥的访问权限:

.\aspnet_regiis.exe -pa "NetFrameworkConfigurationKey" "MySiteIdentity"

如果您不知道您的网站标识是什么,可以使用System.Security.Principal.WindowsIdentity.GetCurrent().Name找到它。

然后,如果web.config位于与DefaultWebsite不同的网站下,您可能需要指定-site选项。如果未指定该选项,则默认为-site 1(DefaultWebsite,其具有INSTANCE_ID服务器变量&#34; 1&#34;)。 为了找到您网站的INSTANCE_ID,您可以在.cshtml页面中请求服务器变量,如下所示:

    @foreach (string var in Request.ServerVariables)
    {
        Response.Write(var + " " + Request[var] + "<br>");
    }

现在,假设您发现您网站的实例ID为2.您可以在命令中使用它,如下所示:

.\aspnet_regiis.exe -pe "connectionStrings" -app "/NewTestAPI" -site "2"

注意:&#34; / NewTestAPI&#34; path是一个虚拟路径,并假定您的应用程序作为应用程序托管在本地IIS中。此外,只有当您的应用程序位于与DefaultWebSite不同的网站下,或者您再次删除并创建了DefaultWebsite时,才需要-site选项。

<强>更新: 实际问题是应用程序作为网站而不是应用程序托管在IIS中(因此没有虚拟路径,只有物理路径)。这就是为什么aspnet_regiis在尝试给它一个虚拟路径(-app选项)时会失败的原因。要为aspnet_regi提供物理路径,我们必须使用-pef选项,如下所示:

.\aspnet_regiis.exe -pef "connectionStrings" "E:\DropBox\ABC\TestApi"