ASP.Net Core: использование общего проекта для обмена статическими активами (css / js) между многими проектами - PullRequest
0 голосов
/ 02 июня 2018

Вдохновившись отсюда: http://rion.io/2017/03/22/sharing-is-caring-using-shared-projects-in-asp-net/, Я пытаюсь использовать общие проекты для совместного использования статических ресурсов (например, css / js) между несколькими проектами ASP.Net Core.

Я создал общий ресурспроект и добавил этот файл в этой иерархии папок:

enter image description here

Затем я добавил ссылку на этот общий проект из моего веб-проекта ASP.Net Core.Однако я не могу получить доступ к этому файлу при запуске проекта.Я попробовал эти URL (среди многих других):

http://localhost:50000/assets.style.css
http://localhost:50000/wwwroot/assets/style.css

Все они приводят к 404. Кажется, я либо не нашел способа сделать эти файлы доступными в моем веб-проекте, либо я ссылаюсьих неправильно.Кто-нибудь знает, как заставить это работать?

1 Ответ

0 голосов
/ 28 августа 2018

Вот как я решил эту проблему.Я не использовал Shared Project, потому что не мог заставить это работать.Вместо этого я использовал PhysicalFileProvider, и он работает как шарм.

Для этого я создал новую папку в src.Я назвал его assets, поэтому мой Solution Explorer выглядит примерно так:

src/assets
src/Foo.Web1
src/Foo.Web2
test/Foo.Tests

Я поместил все общие статические ресурсы (например, CSS, JavaScript, изображения) в /src/assets.Теперь я сопоставляю /src/assets с папками wwwroot/assets в проектах Foo.Web1 и Foo.Web2, используя PhysicalFileProvider.В методе Startup.cs Configure я добавляю следующее:

if (Env.IsDevelopment())
{
    // app is IApplicationBuilder and Env is IHostingEnvironment
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(Regex.Replace(Env.ContentRootPath, $"{Env.ApplicationName}$", "assets"))),
        RequestPath = new PathString("/assets"),
        OnPrepareResponse = ctx =>
        {
            // Optionally manipulate the response as you'd like. for example, I'm setting a no cache directive here for dev.
            ctx.Context.Response.Headers.Append("Cache-Control", "no-cache, no-store, must-revalidate");
        }
    });
}

Теперь любой запрос, поступающий на /assets, будет обслуживаться из папки /src/assets, которая может быть общей для Foo.Web1и Foo.Web2.Все изменения в /src/assets будут отражены в режиме реального времени.Это прекрасно работает в dev, но когда дело доходит до производства, я этого не делаю.Вместо этого я копирую файлы из /src/assets в Foo.Web1/wwwroot/assets и Foo.Web2/wwwroot/assets в своем сценарии развертывания, поэтому переопределение не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...