2016-07-29 55 views
0

我正尝试使用aspnet_regiis加密web.config文件中给出的连接字符串。 所以我试图打开ASPNET_REGIIS.EXE作为无法为请求的配置对象创建Web API Configruation文件

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

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

它抛出一个错误,说“Configruation文件不能为请求的配置object.Failed创造!”我甚至尝试共享的文件夹

enter image description here

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

即使抛出了所要求的配置object.Failed无法创建相同的错误Configruation文件!”

下面是我的ConnectionStrings有

<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:\收存箱\ ABC \ TestAPI” -site “3” -prov “RsaProtectedConfigurationProvider”

回答

0

初始答案

首先,你应该确保您授予的RSA加密密钥访问:

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

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

然后,如果web.config位于与DefaultWebsite不同的网站下,那么您可能需要指定-site选项。如果未指定该选项,则默认为-site 1(DefaultWebsite,其INSTANCE_ID服务器变量为“1”)。 为了找到您的网站的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" 

:在“/ NewTestAPI”路径是一个虚拟路径,并假定您的应用程序在本地IIS作为应用程序托管。此外,-site选项仅在您的应用程序位于与DefaultWebSite不同的网站下,或者您再次移除并创建了DefaultWebsite时才需要。

更新: 实际的问题是,应用程序是在IIS托管的网站,而不是一个应用程序(所以没有虚拟路径,只是物理上的)。这就是为什么aspnet_regiis在尝试给虚拟路径(-app选项)时会失败。为了让ASPNET_REGIIS物理路径,我们必须使用-pef选项,如下所示:

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

我们不能只给没有siteidentity或站点实例..此外,我不明白的虚拟目录。我已经在IIS中创建了该网站,并已发布应用程序的链接路径。我应该给这条路吗?这是我的第一个应用程序,我有点卡.. – user4912134

+0

我所做的是我发布到文件系统的项目,然后创建该网站,并链接发布的文件夹内发布的应用程序。现在所有东西都在IIS下运行 – user4912134

+0

好吧,只需要仔细检查:如果您现在打开IIS,您可以在“网站”下看到您的应用程序?如果您在浏览器中打开“http:// localhost/NewTestAPI”,您可以看到您的应用程序正常工作,对吧?如果是这种情况,加密仍然无效,请尝试使用“/ NewTestAPI”路径指定我提到的-site选项 – snickro