ASP.NET 5 webappで承認されたユーザーのみに提供したいExcelスプレッドシートのコレクションがあります。
どうもありがとう!
.netコアでwwwrootと同じレベルの専用ディレクトリwwwを作成し、次のコードを使用します。
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
[Authorize(Roles = "SomeRole")]
public IActionResult Performance()
{
return PhysicalFile(Path.Combine(_hostingEnvironment.ContentRootPath,
"www", "MyStaticFile.pdf"), "application/pdf");
}
次の回答に基づいています(.netCoreの場合): static file authorization
ファイルの取得中の認証チェックの場合:
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
if (!context.Context.User.Identity.IsAuthenticated && context.Context.Request.Path.StartsWithSegments("/excelfiles"))
{
throw new Exception("Not authenticated");
}
}
});
ログインフォーム(Login.html)がある場合、ユーザーが認証されておらず、保護されたリソース(/ protectedフォルダーの下のファイル)を要求している場合、ユーザーをログインページにリダイレクトするのが簡単な解決策です。 Startup.csのConfigureメソッドで、次のコードを挿入します。
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated && context.Request.Path.StartsWithSegments("/protected"))
{
context.Response.Redirect("/Login.html");
return;
}
await next.Invoke();
});
これは非常に単純な例ですが、特定の役割を確認するように変更でき、コードをStartup.csから移動して柔軟性を高めることができます。
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated
&& context.Request.Path.StartsWithSegments("/excelfiles"))
{
throw new Exception("Not authenticated");
}
await next.Invoke();
});