【问题标题】:Access to the path is denied. google api local iis publish访问路径被拒绝。 google api 本地 iis 发布
【发布时间】:2015-07-08 07:32:24
【问题描述】:

当我必须验证 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 是唯一的。 在按照在线示例进行操作时,我看不到我遗漏了什么,也看不到我做错了什么。

  • 谢谢

【问题讨论】:

    标签: c# iis google-api google-calendar-api


    【解决方案1】:

    尝试以管理员模式运行 Visual Studio。

    【讨论】:

    • 我是。而且不是在我调试时,而是在我部署到本地站点时。调试时它工作得很好。
    • 好的,那我建议你给所有人文件夹权限试试。
    • 试图给这些用户读/写权限:所有人,经过身份验证的用户,本地帐户,IUSR,本地服务,网络服务,用户,IIS_IUSR ..没有帮助:(
    • @MothCreek 你有没有找到解决方案。我有完全一样的问题。与 IIS Express 一起工作,当我更改为托管的 IIS 时,我遇到了异常。
    【解决方案2】:

    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% 目录,那么如何设置它是很棘手的。这取决于您将其设置为哪个用户以及它运行的应用程序池。例如,如果内存服务 azure 只能访问临时目录。

    【讨论】:

    • 一开始我尝试使用漫游文件夹,但仍然收到“拒绝访问”错误。这就是为什么我试图使用另一个文件夹,但我仍然得到同样的错误。现在尝试使用 LocalFileDataStore 实现,但没有运气。我还尝试向所有人授予对该文件夹的读/写访问权限 - 还没有。
    • 我们确定不是它抱怨的对 json 文件的访问权限?
    • 是的,我尝试像他们在“Google-Dotnet-Sample-master”项目中所做的那样,他们在本地字符串中实例化 CLIENT_ID 和 CLIENT_SECRETS。仍在调试模式下工作,但在本地发布时得到“访问被拒绝”。
    • 我不确定是否缺少授予某些用户对文件夹的读/写访问权限。这些用户拥有它:所有人、经过身份验证的用户、本地帐户、IUSR、本地服务、网络服务、用户、IIS_IUSR。
    • 如果文件 'Google.Apis.Auth.OAuth2.Responses.TokenRespons..' 在我运行已发布版本之前位于文件夹中,则它可以正常工作。但我不能写信给它。我现在已经尝试为该文件夹授予对所有人的读/写访问权限。
    【解决方案3】:

    我在使用 IIS 时在本地解决了这个问题。

    更改应用程序池的高级设置 - 身份。使用您的登录用户而不是“应用程序池”或“网络”或“本地”。

    Image of Advanced settings in Application Pool

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      相关资源
      最近更新 更多