我想使用wwwroot以外的路径来处理某些文件,这些文件只能由授权用户访问并找到PhysicalFileProvider方法。
我的启动看起来像:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Files")),
RequestPath = "/Files"
});
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
我认为这没什么特别的,并且可以在本地计算机上工作。将其上传到托管服务器(Hoster:smarterasp.net)之后,我收到HTTP错误500.30-ANCM进程内启动失败。如果我将新的StaticFileOptions注释掉,则该文件夹当然无法访问。
使用PhysicalFileProvider时我还有其他事情要做吗?
使用.Net Core 3.1
我复制了您的错误,并且该错误是由找不到路径引起的。我通过将静态文件文件夹添加到发布文件夹中来解决它。
这是我的startup.cs的部分代码:
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Files")),
RequestPath = "/Files"
});
这是我的部分代码:
<img src="~/Files/banner1.svg" alt="ASP.NET" class="img-responsive" />
发布文件夹包含发布所需的内容,我将文件文件夹添加到发布文件夹。然后它可以工作。