it-swarm.com.ru

Получить путь к папке wwwroot из контроллера ASP.NET 5 VS 2015

Извините за вопрос noob, но, кажется, я не могу получить Server.MapPath от контроллера. Мне нужно вывести список файлов json из папки images на wwwroot. Они есть на wwwroot/images. Как я могу получить надежный путь wwwroot?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using www.Classes;
using System.Web;

namespace www.Controllers
{
    [Route("api/[controller]")]
    public class ProductsController : Controller
    {
        [HttpGet]
        public IEnumerable<string> Get()
        {
            FolderScanner scanner = new FolderScanner(Server.MapPath("/"));
            return scanner.scan();
        }
    }
}

Server.MapPath, по-видимому, недоступен из пространства имен System.Web.

Проект использует ASP.NET 5 и dotNET 4.6 Framework

14
Magician

Вам нужно будет внедрить IHostingEnvironment в свой класс, чтобы получить доступ к значению свойства ApplicationBasePath: Прочитайте о Внедрение зависимости . После успешного внедрения зависимости вам будет доступен путь wwwroot. Например:

private readonly IHostingEnvironment _appEnvironment;

public ProductsController(IHostingEnvironment appEnvironment)
{
   _appEnvironment = appEnvironment;
}

Использование:

 [HttpGet]
 public IEnumerable<string> Get()
 {
    FolderScanner scanner = new FolderScanner(_appEnvironment.ApplicationBasePath);
    return scanner.scan();
 }
22
Oluwafemi

Я знаю, что на этот вопрос уже был дан ответ, но он дал мне разные результаты в зависимости от среды моего хостинга (IIS Express против IIS). Следующий подход хорошо работает для всех сред хостинга, если вы хотите получить путь к wwwroot ( см. Эту проблему в GitHub ).

Например

private readonly IHostingEnvironment _hostEnvironment;

public ProductsController(IHostingEnvironment hostEnvironment)
{
   _hostEnvironment = hostEnvironment;
}

[HttpGet]
public IEnumerable<string> Get()
{
   FolderScanner scanner = new FolderScanner(_hostEnvironment.WebRootPath);
   return scanner.scan();
}
21
Chief Wiggum

Для тех, кто развертывается в Azure и входит в эту ошибку. То, что я сделал, было обойти это, я не пытался выяснить, почему среда Azure отличается от локальной IIS . Вот моя работа:

if (string.IsNullOrWhiteSpace(_environment.WebRootPath))
{
   _environment.WebRootPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
}

Конечно вам понадобится:

private IHostingEnvironment _environment;

public OnboardingController(IHostingEnvironment environment)
{
     _environment = environment;
}
0
Hung Cao