web-dev-qa-db-ja.com

ASP.NET 5コントローラーVS 2015からwwwrootフォルダーパスを取得する

Noobの質問で申し訳ありませんが、コントローラーからServer.MapPathを取得できないようです。 wwwrootの画像フォルダからjsonファイルリストを出力する必要があります。それらは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を使用しています

16
Magician

IHostingEnvironmentプロパティ値にアクセスするには、クラスにApplicationBasePathを注入する必要があります。 Dependency Injection についてお読みください。依存関係の挿入に成功すると、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