当我必须为Google用户验证身份验证时,我无法访问某些文件夹。
当我在IIS上本地发布时,我收到错误:Access to the path '..' is denied
。
我尝试更改文件夹位置,因此它将位于项目的App_Data中 - 没有运气。
我也试图做these guys正在做的事情,但也没有帮助。
我的代码如下:
string path = AppDomain.CurrentDomain.BaseDirectory + @"\Json\client_secrets.json";
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
try
{
string googlecalendarpath = folderpath + @"\App_Data\GoogleCalendar";
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets, scopes,
_currentAccountNo,
//Vær sikker på, at dette er det samme altid, og er unikt, da ens permissions til Google Calendar bliver bundet op på dette!
CancellationToken.None, new FileDataStore(googlecalendarpath)).Result;
}
catch (Exception ex)
{
return "Cred. FEJL: " +ex.GetFullExceptionString();
}
}
,其中folderpath
来自Server.MapPath("~/App_Data")
,而_currentAccountNo
是唯一的。
在网上关注这些例子时,我看不到我所遗漏的内容,也无法看清我做错了什么。
答案 0 :(得分:0)
尝试以管理员模式运行Visual Studio。
答案 1 :(得分:0)
FileDatastore默认将文件放在%appData%中。通常我会做类似的事情。 (假设我使用" _currentAccountNo"以及)
new FileDataStore("Console.Analytics.Auth.Store")
然后当我调用它时,我得到一个名为
的目录%AppData%\Roaming\Console.Analytics.Auth.Store
该目录中的现在存在一个名为
的文件Google.Apis.Auth.OAuth2.Responses.TokenResponse-[account Num]
将目录发送到fileDataStore只是要创建一个目录,其中包含您在%appdata%中发送到fileDataStore的目录的名称,这可能不是您想要的。
您可能希望改为使用LocalFileDataStore或更好地创建自己的idatastore实现。
我不确定这是不是你的问题。如果IIS有权访问%appdata%目录,那么设置IIS是多么棘手。这取决于您设置的用户以及运行的应用程序池。例如,如果内存服务azure只能访问临时目录。
答案 2 :(得分:0)
我在使用IIS时在本地解决了这个问题。
更改应用程序池的高级设置 - 身份。使用您的登录用户而不是"应用程序池"或"网络"或"本地"。