问题标签 [razor-class-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 从 RCL 访问服务器上的静态文件
我已经阅读了几十个问题,但似乎没有一个对我有用。我没有使用 IIS。我将 ASP.Net Core 3.1 与 Kestrel 一起使用。
我有一个带有资源文件夹的 Razor 类库,因为我有 css、js、内容等文件夹。我使用这个库,所以我所有的常见 Web Api 项目都可以共享公共文件,而不是到处复制它们。为此,我按照此处的指南进行操作。请参阅那里了解如何配置启动。
这很好用,我可以通过例如访问这些文件localhost/css/site.css
。在我的 cshtml 文件中,我可以通过执行包含该文件<link rel="stylesheet" href="~/css/site.css"/>
当我尝试从控制器访问这些文件时,就会出现问题。我有一个名为 content 的 CSS 姊妹文件夹,其中包含 json 文件。我可以通过转到 来查看该文件localhost/content/test.json
,但我不知道如何从控制器访问它。
我想做的是发出 HTTP 请求~/content/test.json
并下载其内容,但找不到路径。
我尝试使用Url.Content
将相对路径映射到绝对路径,但它不起作用。
var url = Url.Content("~/content/test.json"); // spits out "/content/test.json"
我已经IWebHostEnvironment
进入控制器并尝试访问ContentRootFileProvider
and ContentRootPath
,WebRootPath
但是这些路径也不正确。它们分别指向我当前运行的服务的 wwwroot 的父级和 wwwroot。
我尝试创建自己的文件提供程序:
这成功地找到了文件并声称它存在,但fileInfo
'sPhysicalPath
总是null
.
我只想做这样的事情:
我哪里错了?任何指针表示赞赏。
c# - Razor 运行时编译不适用于动态加载的程序集
我无法让 Razor 运行时编译与动态加载的程序集一起使用。我的代码:
Startup.cs
使用这种方法,我需要重新构建加载的程序集项目并重新启动主机以查看更改。当我将最后两行替换为:
我得到错误:
找不到包“<已加载程序集的名称>”的编译库位置。
设置MvcRazorExcludeRefAssembliesFromPublish
为false
不会改变任何东西。PhysicalFileProvider
当我添加对项目的显式引用时,该选项有效。
我正在使用 .NET 5 并且两个项目都有Microsoft.NET.Sdk.Web
类型。
有什么办法可以让它工作吗?
c# - 在运行时从 Razor 类库加载部分视图
我目前正在使用 Razor Pages 在 .Net 5 中开发一个 Web 应用程序,我希望能够为它创建插件。出于这个原因,我需要能够在运行时从特定位置加载 Razor 类库。这一切都按预期工作,但 RCL 还包含部分视图 (.cshtml),我不知道如何在我的应用程序中加载/显示。仅当我将应用程序与 DLL 链接时,帮助程序才能找到它们,但如果我在运行时使用 AssemblyLoadContext.Default.LoadFromAssemblyPath 加载它,则无法找到它们。有没有办法以某种方式加载 RCL,以便我可以使用其中的部分视图而不链接它们?
c# - Blazor WASM 将设置注入 Razor 类库
我的目的是创建一种支付处理服务,我可以将其固定在任何网站的一侧。我的问题是注入设置,例如 Stripe 公钥、Paypal 商家 ID 以及服务器上的特定 url 以发送令牌并收取条带费用。
对于这个问题,这是简化的(Payments
项目最终将成为 dll),但项目结构如下所示:
WebApp 是 ASP.NET Core 托管的 Blazor WASM 项目模板。WebApp.Client
依赖于Payments.Shared
,Payments.Ui
而同时WebApp.Server
也依赖于Payments.Backend
(对于条纹电荷响应等模型)。
由于我想在任何站点上使用此付款服务,并且每个站点的这些服务都不同,因此我需要PaymentSettings.cs
在启动时设置道具。
有没有办法做到这一点?如果这很重要,我只打算与 Blazor WASM 网站一起使用。
我觉得我可以将这些设置传递给WebApp.Client
through string[] args
inProgram.cs
的Main
方法:
然后从那里进入构造函数PaymentSettings.cs
:
但我看不出有任何方法可以从WebApp.Server
项目中做到这一点。
也许我想太多了,我的意思是,如果我至少可以将基本 urlWebApp.Server
注入到Payments.Shared
项目中,然后我可以运行其余部分的 get 请求。
非常感谢任何帮助。
c# - Razor 类库图像显示在登录页面上,但未显示在任何其他页面上
概述:
您好,我创建了一个 Razor 类库,它作为 NuGet 包使用。我在_Layout.cshtml
客户端应用程序中引用了部分视图,并且我在可靠地加载图像时遇到了问题。所有相关代码如下所示。库和客户端都是使用 .NET Core 3.1 编写的。
问题陈述:
启动应用程序时,myCompanyLogo.png
会为登录页面加载图像。但是,离开登录页面后,不会显示徽标。当我导航回登录页面时,徽标再次成功显示。
代码:
在库中,包含的图像文件myCompanyLogo.png
标记为“内容”和“如果较新则复制”。我有一个名为_Header.cshtml
. 该组件定义如下:
这是在_Layout.cshtml
文件中的客户端应用程序中使用的,如下所示:
为了完整起见,HeaderViewModel.cs
定义如下:
c# - 如何检查引用的 Razor 类库中是否存在视图?
前段时间我问如何检查剃刀视图是否存在,但在 ASP.NET Core Razor 页面中?.
在那里我可以Engine.FindView(ViewContext, "Augmenter", isMainPage: false).Success
用来检查视图的存在或不存在。
但是,现在我需要检查引用的 RCL 中是否存在视图。
我尝试了所有这些行,但没有工作:
所有这些行都返回 false,而我可以验证视图确实存在于Products.Views.dll
using 中ILSpy
。
我怎样才能解决这个问题?
javascript - RCL 中所需的 JavaScript 未正确引用
我认为这应该是不费吹灰之力的,但它已经让我头疼了好几个小时。我有一个简单的 Razor 类库 (RCL),其中包含一个包含一些 JavaScript 的页面。
我还有一个_Layout.cshtml
包含@RenderSection("scripts", required: false)
以允许有条件地包含script
-tag。
包含给定的脚本,但尽管引用~/lib/somejs.js
了以下错误,但仍发生以下错误:
所需的文件位于 RCL 的wwwroot/lib
文件夹中。在我看来,给定的路径是错误的,因为它期望文件位于实际 Web 项目中不存在的文件夹而不是 RCL 中。
如何从 RCL 中正确解析引用?理想情况下,使用它的项目不必费心手动包含它们。
编辑:即使插入 Visual Studio 建议的硬编码路径也不能解决问题,例如src="../../wwwroot/lib/some.js"
.
asp.net-core - Razor 类库静态文件参考
我正在构建剃刀类库。可以被多个应用程序使用。Razor 类库具有在 mudblazor 中开发的组件。
这是问题: Mudblazor 有静态文件(css,js)。这是由曾经消费过的客户推荐的。将来如果 mudblazor 被其他 UI 组件替换。客户可能需要更改静态文件的引用。在不更改客户端引用的情况下,我们可以做的最佳方法是什么。这意味着客户端不应更改任何内容(css、js 引用)。
blazor - 如何使路由器根据用户所在的国家/地区从不同的程序集中加载页面
我有一个应用程序,我想制作特定国家/地区的应用程序,以便根据国家/地区为同一路线显示不同的页面。
对于每个国家/地区,我都有一个延迟加载的 RCL,带有自定义组件。我的目标是,当我转到domain.com/
or时domain.com/shop
,特定国家/地区的组件将从 Razor 类库加载。这意味着多个组件在 RCL 之间具有相同的路由。
举个例子:
- 美国:路由器将从
domain.com/shop
加载USApp.dll
。 - 加拿大:路由器将从
domain.com/shop
加载CanadaApp.dll
。
国家/地区存储在浏览器的本地存储中,可以随时更改。
我可以通过哪些方式实现这一目标?对于这种情况,没有关于自定义路由的文档。
asp.net-core - Blazor 服务器 .NET6 Razor 类库资产 404 错误
我有一个 Razor 类库,我已经使用 .NetCore3 和 .NetCore 5 几个月了,没有问题。
在最近将我们的 blazor 服务器应用程序和我们的 Razor 类库更新到 .NetCore 6 之后,我在从 Razor 类库加载资产时遇到了问题。
RCL 是通过 nuget 构建和打包的,我可以看到包中的资产,例如;
Web 应用程序已更新为使用单个 program.cs,并且我正在使用WebApplication.CreateBuilder()
我的设置选项。
加载这些资源时出现 404 错误
我还可以看到wwwroot文件夹和相应的资产被加载到 Visual Studio 中的应用程序项目中。
感觉这是一个配置问题,而不是需要更改的重大问题。
ContentRootPath
或的正确设置是WebRootPath
什么?
更新
据此,我需要使用app.UseStaticFiles();
我已经完成的,以及webBuilder.UseStaticWebAssets();
在ConfigureWebHostDefaults
.NET6中未使用的:(