Startup
クラスで静的ファイルアクセスを既に有効にしているASP.NETCoreアプリケーションのwwwrootフォルダー内のimagesフォルダーからファイルを提供しようとしています。
HostingEnvironment
サービスはwwwrootフォルダーへの絶対パスを提供するWebRootPath
プロパティを提供しますが、このパスを使用すると、ブラウザーのコンソールに「ローカルリソースの読み込みが許可されていません」というエラーが表示されます。 。
localhost
+相対パスを使用してブラウザからファイルにアクセスすると、画像ファイルを取得できるため、認証に関する問題はありません。
今必要なのは、その絶対パスをWebサーバーへの相対パスに変換できるようにすることだけです。
発生しているエラーを考えると、ビューで_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>
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内にあるファイルのすべてのコンテンツが読み取られます。
お役に立てば幸いです