我有一组Excel电子表格,我只想在授权用户的ASP.NET 5 webapp中提供这些电子表格。
非常感谢!
答案 0 :(得分:22)
是的,他们应该进入wwwroot
。目前没有内置的方法来保护wwwroot
目录。但创建一个中间件模块来完成它是非常简单的。有一个易于学习的教程here。
如果您不熟悉开发中间件,我发布了一个GitHub项目,该项目展示了如何通过三个简单步骤创建中间件。您可以下载项目here。
您不需要控制器来访问静态文件。
答案 1 :(得分:8)
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
答案 2 :(得分:1)
这是一个非常简单的示例,但可以更改它以检查特定角色,并且可以将代码移出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();
});
答案 3 :(得分:1)
如果您具有登录表单(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();
});
答案 4 :(得分:1)
在获取文件时进行身份验证检查:
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
if (!context.Context.User.Identity.IsAuthenticated && context.Context.Request.Path.StartsWithSegments("/excelfiles"))
{
throw new Exception("Not authenticated");
}
}
});