外部のライブラリの中にある静的なファイルを処理しようとしていました。外部ライブラリの静的ファイルを提供する
私はすでにControllerとViewsを操作していますが、そのライブラリからリソース(javascript、images、...)をロードできません。ここで
は私Startup.csある外部ライブラリのproject.jsonに
public void ConfigureServices(IServiceCollection services)
{
//...
var personAssembly = typeof(PersonComponent.Program).GetTypeInfo().Assembly;
var personEmbeddedFileProvider = new EmbeddedFileProvider(
personAssembly,
"PersonComponent"
);
services
.AddMvc()
.AddApplicationPart(personAssembly)
.AddControllersAsServices();
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(personEmbeddedFileProvider);
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//...
var personAssembly = typeof(PersonComponent.Program).GetTypeInfo().Assembly;
var personEmbeddedFileProvider = new EmbeddedFileProvider(
personAssembly,
"PersonComponent"
);
app.UseStaticFiles();
//This not work
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new CompositeFileProvider(
personEmbeddedFileProvider
)
});
}
そして、ここに私のbuildOptions設定:
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"embed": [
"Views/**/*.cshtml",
"wwwroot/**"
]
},
誰もが間違って何を教えてもらえますか?
はあなたのすべてをありがとう(と申し訳ありません私の英語の悪い)
を作成すると、あなたのリソースがwwwrootフォルダ内にあることを、事実にに起因することができるとき
RequestPath
変数を埋めます。そのコンテンツを外部のライブラリのルートに移動してみてください – Tsengそれは私のために働いています!ありがとう! しかし、私は外部のプラグインにBowerを使用したいので、ルートにコンテンツを移動させずに代替案を探しています。 私が再び投稿するもの –
私は、あなた自身のプロバイダを書かずに、その可能性は考えていません。 'EmbeddedFileProvider'は、https://github.com/aspnet/FileSystem/blob/rel/1.1.0/src/Microsoft.Extensions.FileProviders.Physical/PhysicalFileProvider.cs#のようなルートパスをサポートしていないようです。 L39このルートパスは 'PhysicalFileProvider'を' wwwroot'に設定します。なぜなら、リクエストミドルウェアはファイルがどこにあるのか分からないからです。ミドルウェアを使用すると、 'wwwroot'なしのパスのみがミドルウェアに渡されます。 – Tseng