SamProf / EmbeddedBlazorContent

Library to load embedded content files (js and css) from Blazor libraries in server-side Blazor mode.
MIT License
38 stars 16 forks source link

How to reference files other than js and css? #2

Open AlseinX opened 5 years ago

AlseinX commented 5 years ago

With client side hosting model, the resource path is _content/<AssemblyName>/<RecursivePath>. But when using this library to fix the server side hosting, the path becomes EmbeddedBlazorFile/<RecursivePath>.

If the component library only contains js and css files it would work properly (maybe not if there are some files with the same recursive path in different libraries) because the js and css is loaded with the _Host.cshtml that can use @Html.EmbeddedBlazorContent() to reference the js and css files with the same default path.

But what if something like an image file is referenced within a blazor component? What would be the proper path for making it work for both client side and server side hosting?

Btw, what does the default path EmbeddedBlazorFile/<RecursivePath> stand for rather than using _content/<AssemblyName>/<RecursivePath> that client side hosting uses?

pcbender commented 5 years ago

For me, I copied the favicon.ico file into the content\dist folder of my library. The file is available to the browser at EmbeddedBlazorFile/dist/favicon.ico.

SeppPenner commented 5 years ago

It's quite simple to get the whole wwwroot folder automatically in a server-side project:

  1. Adjust your _Host.cshtml file in the server project or create it if it doesn't exist, copy the index.html content from your client side project to it and add the following at the top:
@page
@using EmbeddedBlazorContent

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
  1. In the head section of the _Host.cshtml file in the server project, add @Html.EmbeddedBlazorContent() like, e.g.
<html>
    <head>
        @Html.EmbeddedBlazorContent()
    <head>
</html>
  1. In your server project startup class, add using EmbeddedBlazorContent; to the usings section and the following code to the Configure method in your server project startup class:
app.UseEmbeddedBlazorContent(typeof(BaseMatComponent).Assembly);
app.UseClientSideBlazorFiles<Startup>();
app.UseStaticFiles();

app.UseStaticFiles(
    new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(Path.GetFullPath("..\\ClientProject\\wwwroot"))
    });
  1. Pray that it works. In preview8, it did, in preview9 I'm having some issues (I didn't find the exact error yet).