gpt4 book ai didi

c# - ASP.NET 核心 : Custom IFileProvider prevents default IFileProvider from working

转载 作者:行者123 更新时间:2023-11-30 20:31:54 27 4
gpt4 key购买 nike

我正在尝试从类库中的嵌入式资源提供一些 JavaScript。我设法了解了 IFileProvider 并创建了我自己的,现在运行良好。但是,我现在遇到的问题是不再找到物理静态文件(来自 wwwroot)。

我的 Startup.cs 文件中有以下内容:

app.UseStaticFiles(
new StaticFileOptions()
{
// Override file provider to allow embedded resources
FileProvider = new CompositeFileProvider(
HostingEnvironment.ContentRootFileProvider,
new EmbeddedScriptFileProvider()),

//etc
});

我假设使用 CompositeFileProvider 意味着如果在其中一个文件提供程序中找不到该文件,那么它将尝试另一个。我还假设默认文件提供程序是我指定为 HostingEnvironment.ContentRootFileProvider 的文件提供程序。这是不正确的吗?

我唯一能想到的另一件事是,问题出在我的提供者内部的 GetFileInfo() 方法中。其中的定义如下:

public IFileInfo GetFileInfo(string subpath)
{
if (string.IsNullOrEmpty(subpath))
{
return new NotFoundFileInfo(subpath);
}

if (subpath.StartsWith("/", StringComparison.Ordinal))
{
subpath = subpath.Substring(1);
}

var metadata = EmbeddedScripts.FindEmbeddedResource(subpath);

if (metadata == null)
{
return new NotFoundFileInfo(subpath);
}

return new EmbeddedResourceFileInfo(metadata);
}

会不会是返回 NotFoundFileInfo(subpath) 导致我的物理 css、js 和其他静态文件出现问题?如果是这样,我应该在这里返回什么,以便系统知道使用其他文件提供程序?

最佳答案

在深入挖掘源代码后(.NET 现在开源是不是很棒?!),我发现以下链接确实非常有用:

CompositeFileProvider.cs- 基于 GetFileInfo() 中的实现,我可以看到如果我想要其他提供商尝试解决它。​​

StaticFileMiddleware.cs- 此文件显示如果在使用 app.UseStaticFiles 设置静态文件配置时未指定 FileProvider (null),则它将解析一个具有以下代码行:

_fileProvider = _options.FileProvider ?? Helpers.ResolveFileProvider(hostingEnv);

并查看 Helpers.cs显示以下代码:

internal static IFileProvider ResolveFileProvider(IHostingEnvironment hostingEnv)
{
if (hostingEnv.WebRootFileProvider == null)
{
throw new InvalidOperationException("Missing FileProvider.");
}
return hostingEnv.WebRootFileProvider;
}

因此,我使用 HostingEnvironment.ContentRootFileProvider 的假设是不正确的。我应该改用 HostingEnvironment.WebRootFileProvider

现在一切正常。

关于c# - ASP.NET 核心 : Custom IFileProvider prevents default IFileProvider from working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42382081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com