2016-03-31 41 views
2

小さなMVC 5 WebサイトをMVC 6に移植して、大きな変更点を発見しています。ものは壊れている。ASP.NET Core MVCでファイルの最終更新日を取得するにはどうすればよいですか?

MVC 5コードは、hereのように、タイムスタンプを取得するために@File.GetLastWriteTime(this.Server.MapPath(this.VirtualPath))を使用します。明らかにMVC 6では、.cshtmlページにはServerまたはVirtualPathのメンバーは存在しません。新しい呪文は何ですか?

答えて

0

は18ヶ月後に自分の質問を再訪...フレームワークは、今ASP.NETコア2.0 MVCで、フレームワーク、ドキュメント、ベストプラクティスが少し変わったようです。

MS docsに記載されているFileProviderを使用する必要があります。そこここにその記事を再作成するにはポイントはませんが、それにしてください:ドキュメントで説明したように、スタートアップコンストラクタにパラメータをIHostingEnvironmentを追加し、ローカル変数にそれを保存し

  • スタートアップで
  • .ConfigureServices()、また、ドキュメントに記述さIFileProviderサービス、
  • コントローラのコンストラクタパラメータにIFileProviderを追加登録するservices.AddSingleton(HostingEnvironment.ContentRootFileProvider);を呼び出し、ローカル変数にそれを保存し

実際に最後に変更された日付を取得するには、コントローラは次のようになります。

public class HomeController : Controller 
{ 
    private IFileProvider _fileProvider; 

    public HomeController(IFileProvider fileProvider) 
    { 
     _fileProvider = fileProvider; 
    } 

    public IActionResult Index() 
    { 
     DateTimeOffset lastModifiedDate = _fileProvider.GetFileInfo(@"Views\Home\Index.cshtml").LastModified; 
     // use it wisely... 
     return View(); 
    } 
0

ApplicationBasePathIApplicationEnvironmentサービスから取得できます。

private readonly IApplicationEnvironment _env; 

public FileController(IApplicationEnvironment appEnv) 
{ 
    _env= appEnv; 
} 

public IActionResult Index() 
{ 
    var myModel = _env.ApplicationBasePath; 
    return View(myModel); 
} 

は、その後、あなたがたとえば、次のように、独自の経路計算を行うことができます。

public IActionResult Index() 
    { 
     var myFileVirtualPath = "/ab/c.d" 
     var myModel = Path.Combine(_env.ApplicationBasePath, myFileVirtualPath); 
     return View(myModel); 
    } 
関連する問題