. net сайт ядра 2.2 ищет файлы по неправильному пути - PullRequest
0 голосов
/ 04 августа 2020

Я занимаюсь обслуживанием приложения. net core 2.2. На нескольких компьютерах он работает отлично, но когда я публикую sh его на сервере, где он должен быть, он выдает ошибку во всех ссылках на файл. Пример: File.ReadAllText ("./App/Config.json").

Проблема в том, что вместо этого он ищет файл в c: \ windows \ system32 \ inetsrv ... искать его в папке, где опубликован сайт. Это генерирует такие ошибки, как:

Не удалось найти часть пути 'c: \ windows \ system32 \ inetsrv \ App \ Config. json'.

конечно сайт опубликовано в c: \ inetpub \ wwwroot [sitename]

Что может вызывать такое поведение?

1 Ответ

0 голосов
/ 04 августа 2020

Использование относительных путей не является хорошей практикой для кода на стороне сервера.

Вместо этого вы должны использовать IWebHostEnvironment и его свойство WebRootPath

Чтобы получить доступ к этому, вы можно сделать это внутри вашего контроллера следующим образом:

public class MyController : Controller
{
    private IWebHostEnvironment _env;

    public MyController(IWebHostEnvironment env)
    {
        _env = env;
    }

    public SomeMethod()
    {
        foreach(string filePath in Path.Combine(_env.WebRootPath))
        {
            string file = filePath;
        }
    }
}

Если вы не хотите вводить его таким образом или вам нужно получить доступ вне контроллера внутри Startup.cs добавьте public static IWebHostEnvironment _env и отредактируйте это:

public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
    Configuration = configuration;
    _env = env;
}

и теперь вы можете получить к нему доступ из любого места с помощью Startup._env

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...