[英]Get list of areas in asp net core for staticFiles middleware
我使用dotnet core mvc(v3.0預覽版)並使用區域來分隔應用程序的大部分獨立頁面。 我想將.js和.css文件也存儲在area文件夾中,因此我在Startup.cs
提出了以下內容:
app.UseStaticFiles();// wwwroot
var areas = new string[]{"Intro", "Todo"};
app.UseStaticFiles(new StaticFileOptions{
FileProvider = new CompositeFileProvider( areas.Select( area =>
new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(),"Areas", area, "wwwarearoot"))
).ToArray()),
RequestPath = "/areas",
ContentTypeProvider = new FileExtensionContentTypeProvider(
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ ".js", "application/javascript" },
{ ".css", "text/css"},
})
});
這允許(要求)我在文件夾Areas/Intro/wwwarearoot/
和Areas/Todo/wwwarearoot/
包含js,並在~/areas/
前綴下導入javascript和CSS。
我的問題是關於如何改進第二行,因此我實際上得到了應用程序領域,而不是擁有靜態列表。
由於搜索此問題時找不到代碼,因此這里是我最終得到的完整代碼。
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.FileProviders;
namespace MyNamespace.Utils{
public static class AppExtensions{
private static IEnumerable<string> _GetAreasWithAreaRoot(){
var cd = Directory.GetCurrentDirectory();
var directory = new DirectoryInfo(Path.Combine(cd, "Areas"));
var areas = directory.EnumerateDirectories();
foreach(var area in areas){
var wwwarearoot = area.EnumerateDirectories("wwwarearoot").FirstOrDefault();
if(wwwarearoot != null){
yield return wwwarearoot.FullName;
}
}
}
public static void UseAreaStaticFiles(this IApplicationBuilder app){
var areas = _GetAreasWithAreaRoot();
app.UseStaticFiles(new StaticFileOptions{
FileProvider = new CompositeFileProvider( areas.Select( areawwwroot =>
new PhysicalFileProvider(areawwwroot)
).ToArray()),
RequestPath = "/areas",
ContentTypeProvider = new FileExtensionContentTypeProvider(
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ ".js", "application/javascript" },
{ ".css", "text/css"}
})
});
}
}
}
在我的Startup.cs
我可以添加
using MyNamespace.Utils;
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseAreaStaticFiles(); // Areas/{area}/wwwarearoot
...
}
為確保wwwarearoot文件被包含在已發布的工件中,您可能還希望將以下內容添加到*.csproj
文件中
<ItemGroup>
...
<Content Include="Areas\*\wwwarearoot\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
...
</ItemGroup>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.