Blazor Web Assembly-访问RCL中的图像



我是Blazor的新手,所以这可能很明显,但我无法理解。我有一个WebAssembly项目和一个单独的Razor类库,其中有一些组件。我有一个组件,我想要一个图像-我把图像放在库的wwwroot/img文件夹中,并访问下面的

<img src="/img/logo.png" alt="test logo" />

但它不会显示-我试过

<img src="_content/img/logo.png" alt="test logo" />

但它也不会显示。

我能让我的图像显示的唯一方法是把它放在客户端项目的wwwroot/img文件夹中。但我希望我的组件库能够用于其他项目。

非常感谢任何指导。我有Windows窗体的背景,所以我有很多东西要学:(

我也是web开发的新手,但afaik wwwroot文件夹是网页使用的静态文件的文件夹(据我所知,出于安全原因,这也是浏览器可以访问的媒体文件的唯一文件夹(。

几天前我也遇到了同样的问题,我把所有东西都放在wwwroot文件夹中解决了这个问题,但我也发现了一篇文章,其中建议了另一种方法。

http://blog.vivensas.com/static-image-in-blazor-inside-and-outside-web-root/

在那里,基本上建议在Startup.cs文件中创建一个方法,它将能够从其他地方获得您的图像:

public void  Configure(IApplicationBuilder  app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseStaticFiles( new StaticFileOptions
{
FileProvider = new  PhysicalFileProvider(
Path. Combine(Directory . GetCurrentDirectory(), “StaticFilesFolder” )),
RequestPath = “/StaticFiles”
});
}

然后你可以这样使用你的图像:

@page “/”
<h3> Display Image in Blazor</h3>
<div>
<img  src=”/StaticFiles/Image/OutsideWebRoot.png”  />
</div>
@code {
}

编辑:也许我误解了你的问题,要做到这一点,还必须在客户项目中。我不知道如何从客户项目以外的其他解决方案中获取图像。

我在Blazor Server应用程序(.NET 6(中也遇到了这个问题。我在我的blazor应用程序中使用了RCL,当我试图将静态资产保存在我的RCL的/wwwroot/images中,并在同一个RCL组件中使用它们(以显示图标(时,当我在blazor的应用程序中利用它时,我得到了404。

以下是我如何克服这个问题的小技巧:

  • 我将所有静态资产存储在Blazor应用程序中(而不是RCL(
  • 在我的Blazor应用程序的styleseet(site.css或任何其他(中,我为这些资产创建了css变量,比如:
--logo: url(/images/logo/logo-light.png);
  • ,然后在我的RCL中,我使用类选择器使用它们,并将内容应用于创建的CSS变量,如:
.icon:before {
content: var(--logo)
}

工作起来很有魅力。

两年后,以防万一。。。至少在.Net 5、6、…中,。。。

要解决此问题,您需要将图像标记的源设置为_content/YourRazorClassLibraryName/img/log.png

示例:

<img src="_content/YourRazorClassLibraryName/img/logo.png">

重要

如果你没有引用HTML中的图像,就像在示例中一样,图像将不会被下载到_content/YourRazorClassLibraryName/img。因此,你的应用程序中至少有一个html元素需要使用该图像,否则它将无法下载。在CSS中设置元素的背景图像也会导致图像被下载。

您可以通过以下方式进行检查:

  1. 运行您的应用程序
  2. 在chrome\edge中按F12启动开发人员工具
  3. 转到"源"选项卡
  4. 展开[site_url]/_content/[YourRazorClassLibrary]
  5. 检查img文件夹是否存在,或者HTML中未引用的图像是否存在

相关内容

  • 没有找到相关文章

最新更新