Maideen Abdul Kader Ответов: 2

Как решить эту ошибку "не удалось найти часть пути "C:\inetpub\wwwroot\app_data\client_secret.json'"


Привет У меня есть проблема, когда я использую Календарь google.
Когда я вызываю страницу календаря, система выдает ошибку "
"
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\inetpub\wwwroot\App_Data\client_secret.json'.


Пожалуйста, посоветуйте мне

Заранее спасибо

Мейден

Что я уже пробовал:

<pre>Private Shared gFolder As String = System.Web.HttpContext.Current.Server.MapPath("/App_Data")

    Public Shared Function GetClientConfiguration() As GoogleClientSecrets
        Using stream = New FileStream(gFolder & "\client_secret.json", FileMode.Open, FileAccess.Read)
            Return GoogleClientSecrets.Load(stream)
        End Using
    End Function

Mohibur Rashid

что делает
> реж. C:\inetpub\wwwroot\App_Data\client_secret.json
Говорит(в командной строке, конечно)

2 Ответов

Рейтинг:
1

Richard Deeming

Поскольку вы не можете точно контролировать, когда Shared инициализатор поля работает, я был бы склонен избегать использования HttpContext.Current с одного. Если класс инициализируется вне контекста запроса, то вы можете получить NullReferenceException, что затем сделает весь ваш класс непригодным для использования в течение всего срока службы вашего приложения.

Вместо этого сопоставьте путь внутри метода и используйте относительный путь приложения в качестве предложенного решения 1:

Public Shared Function GetClientConfiguration() As GoogleClientSecrets
    Dim context As System.Web.HttpContext = System.Web.HttpContext.Current
    If context Is Nothing Then Throw New InvalidOperationException("Cannot call this method outside of a request.")
    
    Dim filePath As String = context.Server.MapPath("~/App_Data/client_secret.json")
    Using stream = File.OpenRead(filePath)
        Return GoogleClientSecrets.Load(stream)
    End Using
End Function


Рейтинг:
0

OriginalGriff

Попробуй:

Private Shared gFolder As String = System.Web.HttpContext.Current.Server.MapPath("~/App_Data")


Richard Deeming

Я был бы склонен избегать этого. HttpContext.Current в статическом инициализаторе полей, так как вы не можете точно контролировать, когда они будут запущены. :)