web-dev-qa-db-ja.com

絶対ファイルパスを相対パスに変換する

Startupクラスで静的ファイルアクセスを既に有効にしているASP.NETCoreアプリケーションのwwwrootフォルダー内のimagesフォルダーからファイルを提供しようとしています。

HostingEnvironmentサービスはwwwrootフォルダーへの絶対パスを提供するWebRootPathプロパティを提供しますが、このパスを使用すると、ブラウザーのコンソールに「ローカルリソースの読み込みが許可されていません」というエラーが表示されます。 。

localhost +相対パスを使用してブラウザからファイルにアクセスすると、画像ファイルを取得できるため、認証に関する問題はありません。

今必要なのは、その絶対パスをWebサーバーへの相対パスに変換できるようにすることだけです。

9

発生しているエラーを考えると、ビューで_env.WebRootPath + "/images/textfile.txt"を、たとえばhref属性として使用しようとしているようです。

  • これを行うと、ブラウザがページからfile:///C:/Users/PathToYourSite/wwwroot/images/textfile.txtのようなURLを要求しようとし、エラーが発生します。あなたはそれについてもっと読むことができます この答えで 、しかし現代のChromeのようなブラウザでは、httpプロトコルからファイルプロトコルへのリクエストはデフォルトで無効になっています。

したがって、サーバー側ロジックの一部としてファイルの内容を読み取りたい場合は、IHostingEnvironmentアプローチを使用して、それらを使用して何かを実行できるようにする必要があります。

ただし、wwwrootでファイルへのリンクを生成し、それらをビューで使用する必要がある場合は、いくつかのオプションがあります。

  • IUrlHelperを使用して、パブリックURLをwwwroot内のファイルに解決します。ここで、"~/"はwwwrootフォルダーです。次に、hrefのように、必要なときにいつでも使用できます。

    @Url.Content("~/images/textfile.txt")
    
  • "~/"で始まるhref属性を使用してレイザービューにアンカーを直接作成します。 (そこではインテリセンスも得られます)

    <a href="~/images/textfile.txt">Get file from wwwroot</a>
    
6
Daniel J.G.

Wwwrootのファイルにアクセスするには、コントローラーコンストラクターにIHostingEnvironmentを挿入します。

private IHostingEnvironment _env;

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

コントローラを更新してWebRootPathプロパティを読み取り、相対ファイルパスを追加します

var content = System.IO.File.ReadAllText(_env.WebRootPath + "/images/textfile.txt");

これにより、/ wwwroot/images /textfile.txt内にあるファイルのすべてのコンテンツが読み取られます。

お役に立てば幸いです

5
Hossam Barakat