Razor 类库 (RCL) 中包含静态内容的 404

2023-12-29

我在 razor 类库 (.net Core 3.1) 中实现 ASP.NET Core (v3.1) 应用程序使用的静态文件时遇到困难。

当尝试访问静态文件时,我只收到 404 - 未找到。

我在 Stackoverflow 上遵循了以下答案:https://stackoverflow.com/a/57874357/1099519 https://stackoverflow.com/a/57874357/1099519 or

我还交叉检查了以下位置的文档:.

我在库中放置了一个 css 文件,位置如下:wwwroot\css\Base.css我测试了以下路径:https://localhost:44300/_content/OurIt.Cockpit/css/Base.css https://localhost:44300/_content/OurIt.Cockpit/css/Base.css,这会导致 404 未找到响应。

我已经检查过的内容:

  • 任何在 RCL 内具有视图的控制器都可以被浏览并且它们工作正常(渲染的 HTML 代码将提供给浏览器)
  • Having app.UseStaticFiles();在网络应用程序中。
  • Having webBuilder.UseStaticWebAssets();在网络应用程序中。
  • 正确的外壳。
  • The 构建行动 of wwwroot\css\Base.css被设定为Content.
  • RCL项目定义了以下sdk:<Project Sdk="Microsoft.NET.Sdk.Razor">.
  • 在 RCL 项目中设置以下属性:

    <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> <PropertyGroup>

我也尝试过这个答案中描述的方式:https://stackoverflow.com/a/59574845/1099519 https://stackoverflow.com/a/59574845/1099519我尝试从访问该文件https://localhost:44300/path/css/Base.css https://localhost:44300/path/css/Base.css

是否有机会调试或定位问题?关于微软文档:

构建 RCL 时,会生成一个描述静态 Web 资产位置的清单。使用应用程序在运行时读取清单以使用引用的项目和包中的资产。

为了验证文件是否在程序集中,我试图找到该清单,但我找不到它或不知道在哪里查找它(我检查了输出文件夹)。我还尝试使用 ILSpy 打开 RCL,希望找到解决该问题的方法。

有什么想法(或者使用具有 .NET Core 3.1 静态内容的 RCL 的工作示例 - 我只找到了控制器/视图的示例,但没有找到静态内容的示例)?

2020年2月5日更新:

我在 Github 上创建了一个示例用于复制:https://github.com/DominikAmon/RclIssueDemo https://github.com/DominikAmon/RclIssueDemo


我终于让它为我工作了。我已对您在以下位置创建的问题添加了评论https://github.com/dotnet/AspNetCore.Docs/issues/16837 https://github.com/dotnet/AspNetCore.Docs/issues/16837.

我现在工作的 .csproj 的相关部分是:

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
    <GenerateMvcApplicationPartsAssemblyAttributes>true</GenerateMvcApplicationPartsAssemblyAttributes>
    <RazorCompileOnBuild>true</RazorCompileOnBuild>
    <IncludeRazorContentInPack>false</IncludeRazorContentInPack>
    <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
    <EnableDefaultRazorGenerateItems>true</EnableDefaultRazorGenerateItems>
  </PropertyGroup>

 <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
  </ItemGroup>

  <PropertyGroup>
    <StaticWebAssetBasePath Condition="$(StaticWebAssetBasePath) == ''">/</StaticWebAssetBasePath>
  </PropertyGroup>
</Project>

也许并不是上面所有的设置都是必需的,但由于它正在工作,我不想过多地接触它 -如果有效,请勿触摸 :-)

现在,还有其他一些阻碍的问题:

  • 因为我想在本地测试我的 NuGet 包,所以我想首先将包推送到本地存储库文件夹,以便我可以从测试应用程序使用它们。然而,没有任何地方记录 dotnet nuget 也可以推送到本地目录,所以我想我必须使用独立的 nuget.exe 来实现这一点。嗯,显然将 nuget.exe 与 RCL 库一起使用不是一个好主意 https://github.com/dotnet/AspNetCore.Docs/issues/13951。相反,您可以使用:
dotnet nuget push .\bin\Release\DynamicVML.1.0.32.nupkg -s c:\Projects\nuget

(请注意,-s 选项被描述为server URL in the 文档 https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push但其实也可以是本地文件夹,这个就不解释了)

  • 有太多过时的文章和 StackOverflow 答案可能会让您走上错误的道路。我身上发生的事情是,在某个时刻我试图跟随教程 https://www.learnrazorpages.com/advanced/razor-class-library from 不同的 https://dotnetstories.com/blog/How-to-Include-static-files-in-a-Razor-library-en-7156675136 sources https://weblog.west-wind.com/posts/2019/Sep/30/Serving-ASPNET-Core-Web-Content-from-External-Folders事实证明,它对于 .NET Core 3.1 来说已经过时了。我最终弄乱了我的项目文件,并忘记撤消我所做的一些更改。为了使其一切正常,请确保:

  • 视图/.cshtml 文件必须设置为“Build Action: Content”;

  • 静态文件/js文件必须设置为“Build Action: Content”;

现在,到消费者应用程序部分:

  • 我不必添加webBuilder.UseStaticWebAssets();在 Program.cs 中,有一瞬间我以为我已经做到了。所以我的 CreateHostBuilder 看起来就像这样:
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

我不必添加过时教程中描述的任何 FileProvider 功能。我的配置服务就像这样干净:

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseInMemoryDatabase("BookAuthors"));
}

我的配置只是基线配置:

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.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

通过以上设置,一切正常。我可以包含 RCL 库中的 js 文件即使他们实际上并不存在于消费者项目 wwwroot 中(我知道当前文档中记录了这一点,但在某些时候我试图通过添加使用DirectoryBrowser进行我的配置 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1并检查所提供文件夹的内容 - 这不起作用,来自 RCL 的静态文件将不会显示)。

另外,请注意其他有类似问题的人:通过上述设置(更具体地说,由于最后一个配置块),我可以使用来自的静态文件/。我没有使用/_content/LibraryName/...路径。在我的 RCL 中,我有以下结构

- wwwroot
---- lib
------- myFolder
---------- myScript.js

在消费者应用程序中,我只需使用以下命令即可使用 .js 文件

@section Scripts {
    <script src="~/lib/myFolder/myScript.js"></script>
}

...而且它有效!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Razor 类库 (RCL) 中包含静态内容的 404 的相关文章

随机推荐

  • 如果您仍然需要执行相同的步骤,那么 git merge 比 svn merge 更好吗?

    看完之后Git 中的合并如何比 SVN 中更好 https stackoverflow com questions 2471606 how and or why is merging in git better than in svn我还是
  • YouTube Analytics API 不会返回查询特定视频的 ROWS

    我正在使用 YouTube Analytics API 来获取特定查询的分析 对于频道查询来说它效果很好 当我对特定视频执行查询时出现问题 像这样 开始已定义 deviceType stats optparams array dimensi
  • android.location.LocationManager.PASSIVE_PROVIDER 的含义是什么?

    我明白的意思GPS PROVIDER http developer android com reference android location LocationManager html GPS PROVIDER 位置来自 GPS 信号 和
  • iOS15 UTType 弃用 URL 扩展 [重复]

    这个问题在这里已经有答案了 使用Swift5 5 iOS15 0 1 从 iOS15 开始 我意识到与我现有的 URL 扩展相关的一些弃用行为正在发生 我没有找到任何关于如何重写现有扩展的好的文档 这是我目前的实现 大约是 16个折旧警告我
  • adb 找不到索尼 Xperia Z 平板电脑

    我最近拿到了一台索尼 xperia z 想在其上部署 调试我的 xamarin droid 项目 我做了什么 将平板电脑连接到我的开发机器 在设备设置中启用开发者选项 还启用了USB调试 然后平板电脑本身在我的开发机器上安装了驱动程序 现在
  • 为什么我在角反应形式的 *ngIf 中遇到错误

    我知道这是一个非常愚蠢的问题 对于像我这样有 SOF 声誉的人来说 不应该问这个问题 然而 我正在拉扯我的头发 似乎不明白我做错了什么 我指的是一个例子创建反应形式 在 Stackblitz 中一切看起来都很好 我的代码也运行得很好 但是在
  • UDP 套接字设置超时

    我正在尝试在 UDP 套接字上设置 100 毫秒超时 我正在使用 C 我在下面发布了相关的代码片段 我不确定为什么这没有超时 而是在没有收到段时挂起 这只适用于未使用bind 方法绑定的套接字吗 define TIMEOUT MS 100
  • UITapGestureRecognizer 不执行任何操作

    我有一个应用程序 可以显示一页文本 可以点击按钮或在视图中滑动以在各个页面中前进或后退 容器视图附加了两个 UISwipeGestureRecognizer 用于向左滑动和向右滑动 这些手势没有任何问题 但现在我正在尝试将 UITapGes
  • Wildfly 中出现“意外调用状态 0”错误

    我创建了一个小例子来演示该错误 有状态 Bean 将列表作为其状态并注入无状态 Bean Stateful RequestScoped public class StatefulBean Inject StatelessBean slsb
  • 维基百科对MapReduce的reduce的解释不正确吗?

    MongoDB的解释 http www mongodb org display DOCS MapReduce MapReduce ReduceFunction减少阶段说 Map Reduce引擎可以迭代地调用Reduce函数 因此 这些函数
  • 向 docker 推送/拉取镜像时出现错误:403 Forbidden

    我在用泊坞窗服务器版本 1 10 3安装了 docker 发行版RHEL 7 2 我面临的问题是间歇性的 有时推 拉命令有效 有时会抛出以下错误 Pulling repository test a b c com hello world E
  • Rails 使用 :collection 渲染部分内容

    这很简单 不应该成为问题 但我不明白这里发生了什么 我有以下代码 class DashboardController lt ApplicationController def bookings bookings Booking all en
  • 用CSS识别浏览器和操作系统?

    我知道为特定浏览器或操作系统编写特定 CSS 代码不是正确的做法 但在我正在构建的网站中 某些元素在特定浏览器中无法很好地呈现 例如 某些元素在 IE8 中不受支持 或者在小 iPhone 显示屏中看起来很奇怪 因此我的问题是 仅使用 CS
  • 确定网络驱动器的协议

    有没有办法确定 Windows 上安装的网络驱动器所使用的协议名称 SMB CIFS NFS 和版本 在 C 中 EDIT 使用 Rusted 的答案中的信息 我从网络上的 Windows 7 计算机获得了以下信息 NETRESOURCE
  • 从 Java 调用 Oracle 函数

    我在使用 ojdbc14 jar 从 Java 1 6 调用 Oracle 函数 不是存储过程 时遇到问题 我不知道该函数包含什么 因为我从远程服务器调用它 我所知道的是 FUNCTION ap ch get acct balances V
  • iOS 6 方向方法

    iOS 6 中的方向方法发生了变化 我在纵向模式下的整个应用程序有许多视图控制器 不是选项卡栏视图控制器 我只想在旋转设备时将其中一个视图控制器旋转到横向模式 它实际上显示 webView 下面的方法适用于xcode 4 4 但是 它不在
  • 帮助以窗口形式向 DataGridView 添加复选框列

    我正在尝试在简单的窗口窗体应用程序中向 DataGridView 添加复选框列 我使用 ADO NET 从数据库中提取一些数据 放入数据表中 然后将 datagridview 数据源设置为数据表 然后我想添加一个复选框列作为第二列 到目前为
  • 为什么这个程序在布尔条件变量不存在波动的情况下不会进入无限循环?

    我想了解何时需要将变量声明为易失性 为此 我编写了一个小程序 并期望它由于缺少条件变量的波动性而进入无限循环 它没有进入无限循环 并且在没有 volatile 关键字的情况下工作正常 两个问题 我应该在下面的代码清单中更改什么 以便它绝对需
  • Android BLE,读写特性

    我目前正在开发 Android BLE 并遇到了很多 Android BLE 堆栈的问题 我的开发工具是带有 Android 4 3 的 Samsung Galaxy J 我想知道如何从 BLE 读取特征并写入特征 就像我验证收到的数据 然
  • Razor 类库 (RCL) 中包含静态内容的 404

    我在 razor 类库 net Core 3 1 中实现 ASP NET Core v3 1 应用程序使用的静态文件时遇到困难 当尝试访问静态文件时 我只收到 404 未找到 我在 Stackoverflow 上遵循了以下答案 https