JS文件在www根文件夹之外

时间:2017-04-27 09:04:42

标签: javascript asp.net-core visual-studio-2017

我想知道如何访问或创建在Visual Studio 2017中创建的.net核心项目中的www根文件夹之外的javascript文件。我已在我的视图所在的文件夹中创建了一个文件,但我无法访问该文件。

3 个答案:

答案 0 :(得分:0)

根目录的目的是通过HTTP公开文件。

如果文件没有通过HTTP公开,那么它没有网址。

如果没有网址,浏览器就无法提出请求。

将文件移动到根目录。

答案 1 :(得分:0)

ASP.NET公开了wwwroot文件夹中的所有静态filse。建议您将文件放在99%的位置。但是,如果您的项目确实需要将您的javascript文件放在views文件夹中(我不明白为什么),您可以创建一个中间件。 您的中间件只需要是IApplicationBuilder接口的扩展方法

为此,你可以像这样创建一个静态类

// your middleware (static class so it can have extension methods)
public static class MyStaticFileServer
{
   //static method (IApplicationEnvironment so we can easily get the full path of our Project)
   public static IApplicationBuilder UseJsFiles(this IApplicationBuilder app, IApplicationEnvironment env)
   { 
      //
       var path = Path.Combine(env.ApplicationBasePath, "/Views/Js")
       var provider = new PhysicalFileProvider(path); 
       var options = new StaticFileOptions();

       //so our middleware only responds when the url begins with "/Views/js"
       options.RequestPath = "/Views/Js";

       // file provider so we can serve files
       options.FileProvider = provider

       //use static file middleware to our middleware to serve files from whatever folder we specify
       app.UseStaticFiles(options)
       return app;
   }
}

现在,您已完成中间件,以便从您选择的文件夹中提供静态文件。现在,我们需要从启动类调用我们的中间件。我们通过在Startup类

中的configure类中调用它来完成此操作
//ASP.NET Configure Method in the Startup.cs file 
public void Configure(IApplicationEnvironment environment)
{
    app.UseJsFiles(environment);
}

答案 2 :(得分:0)

你可以在.net core中实际执行此操作。

我假设你已经启动并运行了静态文件中间件,但是只需要在你的nuget包管理器中运行以下命令:

Install-Package Microsoft.AspNetCore.StaticFiles

在startup.cs中,您将拥有一个Configure方法。它可能看起来与以下内容不太相似:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseStaticFiles();
    app.UseMvcWithDefaultRoute();
}

所以UseStaticFiles将从wwwroot提供服务。但实际上,您可以在管道中添加相同中间件的多种用途。请考虑以下事项:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseStaticFiles();

    app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"content", @"js")),
        RequestPath = new PathString("/content/js")
    });

    app.UseMvcWithDefaultRoute();
}

这里我们按照正常情况提供来自wwwroot的静态内容,但我们也想说也应该提供/ Content / Js的文件位置。您可以根据需要添加任意数量的这些内容并提供静态内容。

更多信息