2017-09-19 3 views
1

ASP.NET Core 2.0 Webアプリケーションで静的ファイルを有効にしようとしています。 wwwrootフォルダの外にあるupdaterというフォルダに複数のファイルがあります。それらにアクセスできるようにするにはasp.netコアの静的ファイル

app.UseStaticFiles(new StaticFileOptions() 
{ 
    ServeUnknownFileTypes = true, 
    FileProvider = new PhysicalFileProvider(
     Path.Combine(Directory.GetCurrentDirectory(), @"TestUpdater") 
    ), 
    RequestPath = new PathString("/Updater") 
}); 

これにより、別のプログラムでURLを呼び出してファイルを取得できるようになりました。問題は、サービスの代わりにダウンロードする必要があるすべてのファイルです。 1つのtxtファイルがあります。サービスの代わりにダウンロードのみを許可するにはどうすればよいですか?

答えて

2

以下の回答は意図した効果をもたらしますが、使用する適切なヘッダーはContent-Dispositionです。あなたが説明するように、「サービス提供」と「ダウンロード」ファイルの唯一の違いは、1つのインスタンスで、ブラウザは一時的な場所にファイルをダウンロードし、他の一方で、ウィンドウに表示していることである


application/octet-stream documentationを参照してください)ブラウザは、ファイルを永久保存場所に保存する場所をユーザーに尋ねます。

あなたが参照している他のプログラムがこれらのファイルのサーバーに直接接続している場合は、問題ではありません。たとえば、HttpClientを使用すると、静的ファイルミドルウェアをまったく変更する必要はありません。

認識されたコンテンツタイプであってもブラウザにファイルを保存するように要求する場合は、Content-Typeレスポンスヘッダーを "application/octet-stream"に設定してみてください。 Startup.cs設定からこれを行うには、StaticFileOptionsを次のようなものに変更します。

new StaticFileOptions() 
{ 
    OnPrepareResponse = context => 
    { 
     context.Context.Response.Headers["Content-Type"] = "application/octet-stream"; 
    } 
} 
+0

これはそうです。私は実際に実行される必要がある、そこにもPHPファイルがあります、そして、私は "サービング"が問題だと思った。問題は依然として続きます。特に静的なPHPファイルを実行するために必要なことは何ですか? – Ratan

+0

@RatanそのためにファイルをPHPで実行する必要があります。 PHPをサーバー上で実行していますか? – Eilon

+0

はい、同じサーバー上の非コアサイトから提供されたときにファイルが実行されるため、PHPが実行されています(これは非常に奇妙なアーキテクチャのようです)。はい、私はそれに同意します。私は将来それを変更するつもりですが、現時点では不可能です。既存の非コアをコアにアップグレードし、実際にそこから移動するまで古いファイルの一部を維持する必要があるためです。 – Ratan

関連する問題