在wwwroot之外提供HTML文件的.NET Core无法加载JS文件

时间:2017-07-07 15:52:37

标签: asp.net-core asp.net-core-mvc angular-cli

我正在尝试使用.NET Core Authorization保护Angular CLI应用程序的不同方法。

为了使其尽可能安全,我希望保持所有Angular CLI输出文件的公开可用,并将它们保存在CLI预先配置的默认“dist”文件夹中。

我可以通过返回PhysicalFileResult ...

从授权控制器加载index.html
public IActionResult Index()
{
    return PhysicalFile(Path.Combine(Directory.GetCurrentDirectory(), "dist", "index.html"),"text/HTML");
}

但是当页面加载时,我在所有的bundle.js文件上都有404.

是否有可能以这种方式提供应用程序而不涉及静态文件中间件或使文件公开可用(最好不必手动更改index.html中每个捆绑的js文件的src)?

2 个答案:

答案 0 :(得分:0)

看一下asp.net核心文档中的这篇文章(摘录如下):https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#static-file-authorization


enter image description here

答案 1 :(得分:0)

只需将授权中间件放在静态中间件之前。

// has to be first so user gets authenticated before the static middleware is called
app.UseIdentity();

app.Use(async (context, next) => 
{
    // for pathes which begin with "app" check if user is logged in
    if(context.Request.Path.StartsWith("app") && httpContext.User==null)
    {
        // return "Unauthorized"
        context.Response.StatusCode = 401;
        return;
    }

    // If user is logged in, call next middleware
    await next.Invoke();
});

app.UseStaticFiles();