我有一个项目,需要从外部检索其托管的服务器上的文件本身.目前,我只是抓取一个Java脚本文件,但它最终会抓取其他东西.我try 在Program.cs中更改内容根路径来实现这一点,效果非常好.但我注意到,原始的指向Javascrip和css文件的相对链接仍然有效,没有任何更改.

例如,路径"~/css/site.css"仍然有效,尽管更改了内容根路径,并且没有告诉它专门在我的项目自己的wwwroot文件夹中查找.外部文件必须使用更具体的路径.例如:"~/some-other-project/wwwroot/js/myscripts.js".

现在,这一切都很好,实际上更倾向于行为,但我想知道why,它是这样工作的.项目是否先判断自己的wwwroot文件夹,然后再在内容根路径中指定的文件夹中查找其他位置?我想了解这背后的行为,这样我就可以更有信心地使用这种方法.

编辑: 以下是回购的例子:https://github.com/love-bird-13/Custom-Content-Path-Test 第一次提交只是设置了两个基本的.NET6项目,没有任何更改.第二个提交包含我为重现我所说的内容所做的所有更改.

推荐答案

关于你的问题

项目是否先判断自己的wwwroot文件夹,然后再在内容根路径中指定的文件夹中查找其他位置?

Serve files outside wwwroot by updating IWebHostEnvironment.WebRootPath主题具体如下.

如果将IWebHostEnvironment.WebRootPath设置为wwwroot以外的文件夹

  • development环境中,wwwroot和更新IWebHostEnvironment.WebRootPath中的静态assets资源 都从wwwroot提供服务.
  • 在除development之外的任何环境中,从更新的IWebHostEnvironment.WebRootPath文件夹中提供重复的静态资源.

因此,您描述的行为适用于development环境模式.

您将注意到,当环境变量为changing时,将ASPNETCORE_ENVIRONMENT环境变量设置为Development以外的值--这是开发时的默认设置--wwwroot中的文件将不再提供服务.


同一主题为下面的场景提供了一些方法.

  1. 如果您希望静态内容只从定制路径提供,而不是默认的wwwroot,那么最简单的方法可能就是删除那个wwwroot文件夹.

  2. 如果您想将wwwroot与自定义文件夹组合在一起,那么您可以在Program.cs中添加额外的app.UseStaticFiles;下面的Assets是一个包含一些静态文件的自定义文件夹,但它可以是任何可访问的绝对路径.

    app.UseStaticFiles();
    
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(builder.Environment.ContentRootPath, "Assets")
            // Or some other absolute path. 
        )
    });
    

Asp.net相关问答推荐

try 在 .net 中使用 MS Graph 添加新的应用程序角色时出现 ODataError

如何从 ASP.NET 中的代码隐藏文件访问 IFRAME?

ReportViewer 控件 - 高度问题

如何在页面加载之前运行 JavaScript 代码?

ASP.NET Membership:如何将用户设置为已登录

如何将 Castle Windsor 与 ASP.Net Web 表单一起使用?

无法让嵌套在 UpdatePanel 中的 WebControl 中的 ScriptManager.RegisterStartupScript 工作

在 Asp.net Rowcommand 事件中获取行索引

如何获取 ActionLink 的工具提示?

带有完整内存错误的 WCF 服务(内存门判断失败,因为可用内存) - 如何解决

如何获取 ASP.NET 应用程序的完整虚拟路径

oAuth ASP.NET 成员资格提供程序

如何判断用户代理是 ipad 还是 iphone?

如何判断本地主机

路由模板分隔符/不能连续出现 - 属性路由问题

如何获取部署在 Azure 网站上的 ASP.NET 5 应用程序的错误详细信息?

有没有办法在没有异常类的情况下抛出自定义异常

Docker 中的 ASPNETCORE_ENVIRONMENT

elmah:没有 HttpContext 的异常?

在后面的代码中删除 css 类