2017-04-27 24 views
0

我想知道如何在Visual Studio 2017創建的.net核心項目的www根文件夾之外訪問或創建一個javascript文件。我在我的視圖所在的文件夾中創建了一個文件,但我無法訪問該文件。JS在www根文件夾外的文件

+0

把它放在www文件夾? – evolutionxbox

回答

0

根目錄的要點是通過HTTP公開文件。

如果文件沒有通過HTTP公開,那麼它沒有URL。

如果它沒有URL,瀏覽器無法請求它。

將文件移動到根目錄中。

0

ASP.NET將wwwroot文件夾中的所有靜態filse公開。建議在99%的時間內將文件放在那裏。但是,如果您的項目確實需要將您的JavaScript文件放入視圖文件夾(並且我不明白爲什麼),則可以創建一箇中間件。 您的中間件只是必須對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; 
    } 
} 

現在你和中間件進行服務從靜態文件您選擇的文件夾。現在,我們需要從啓動類中調用我們的中間件。我們通過在啓動類中的配置類中調用它來執行此操作。

//ASP.NET Configure Method in the Startup.cs file 
public void Configure(IApplicationEnvironment environment) 
{ 
    app.UseJsFiles(environment); 
} 
0

您實際上可以在.net內核中以原生方式執行此操作。

我假設你有靜態文件中間件運行起來了,但只是櫃面,請在您的NuGet包管理器中的以下內容:

Install-Package Microsoft.AspNetCore.StaticFiles 

您startup.cs裏面,你將有一個配置方法。它可能看起來不太相似,如下所示:

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文件按正常,但我們也希望說的/內容的文件位置/ JS應該擔當好。您可以根據需要添加儘可能多的這些內容並提供靜態內容。

更多信息