2017-12-19 9 views
0

レイアウトページを.netコア2.0に変換しようとしています。残念ながら、Server.MapPathはもう使用できません。どのようにあなたは.net core 2.0 mvcのためのかみそりのパスをマップしますか?

私はあなたがWebアプリケーションの特定のパスへのアクセスを得るためにIHostingEnvironmentサービスを使用することができ、ASP.NETコアで

<div style="height: 0px; width: 0px; position: absolute; visibility: hidden;"> 
     @Html.Raw(System.IO.File.ReadAllText(Server.MapPath("~/Content/images/svg-defs.svg"))) 
    </div> 

答えて

3

ため.cshtmlページで同等のものを見つけようとしています。

このオブジェクト上の2つの興味深い性質があります。

  • ContentRootPath:パス:などあなたが通常appsettings.json見つけるだろうアプリケーションのベースパス(、Program.csが、
  • WebRootPathへのパスあなたが探しているものです/ wwwrootディレクトリ、。

IHostingEnvironmentサービスへのアクセスを得るためにに、単にあなたのコントローラのコンストラクタでそれを注入し、フィールドでそれに保持します。今

public class HomeController : Controller 
{ 
    private IHostingEnvironment _env; 

    public HomeController(IHostingEnvironment env) 
    { 
     _env = env; 
    } 
} 

、このコントローラのアクションメソッドでは、あなたが今System.IO.Path.Combineを使用してファイルとWebRootPath財産への物理パスを構築することができます。この例では

public IActionResult Index() 
{ 
    ViewBag.FilePath = Path.Combine(_env.WebRootPath, @"Content\images\svg-defs.svg"); 
    return View(); 
} 

Iは容易インデックスビューで表示するViewBagに得られた経路を追加した:

<h2>Index View</h2> 

<p>Filepath: @ViewBag.FilePath</p> 

これはC:\MySite\wwwroot\Content\images\svg-defs.svg

の線に沿って何かを印刷し
関連する問題