我正在尝试使用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对象创建配置文件。失败!”我甚至试过共享文件夹
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,如图所示,但错误相同
aspnet_regiis -pe“connectionStrings”-app“/ E:\ Dropbox \ ABC \ TestAPI”-site“3”-prov“RsaProtectedConfigurationProvider”
答案 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"