app.UseStaticFiles () не работает.Index.cshtml загружается несколько раз - PullRequest
0 голосов
/ 24 января 2019

У меня есть простое приложение .net-core с веб-пакетом.Webpack генерирует для меня файлы css и js и сохраняет их в папке wwwroot / dist.

Похоже, что каждый раз, когда файл css или js загружается из папки dist (_Layout.cshtml), это вызывает загрузку индексного метода в HomeController.один раз на запрос cs / js.

Мой Index.cshtml пуст (для целей дебюта), мой _Layout.cshtml выглядит так:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"]</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <base href="~/" />

    <link rel="stylesheet" href="~/dist/vendor.css" type="text/css" />

</head>
<body>

    <div id="app">

        <main id="appContent" class="container-fluid">
            @RenderBody()
        </main>
    </div>

    <script src="~/dist/vendor.js"></script>
    <script src="~/dist/main.js"></script>
    @RenderSection("Scripts", required: false)
</body>
</html>

В моем Startup.cs у меня есть егоcode:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
                {
                    HotModuleReplacement = true
                });
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            string cultureCode = options.Value.DefaultRequestCulture.Culture.Name ?? "en-GB";

            app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{culturecode}/{controller}/{action}/{id?}",
                defaults: new { culturecode = cultureCode, controller = "Home", action = "Index" },
                constraints: new { id = new IntRouteConstraint() },
                dataTokens: new { locale = cultureCode });
        });

            app.Use(async (httpContext, next) =>
            {
                var url = httpContext.Request.Path.ToString();
                if (url.StartsWith("/"))
                {
                    if (cultureCode.ToLower() == "en-us")
                        cultureCode = "en-GB";

                    httpContext.Response.Redirect($"/{cultureCode}/", true);
                    return;
                }
                await next();
            });
        }

Я попытался настроить метод useStaticFiles, удалить вызов HotModuleReplacement и изменения маршрутов, но безуспешно.Насколько я понимаю, с помощью useStaticFiles все файлы из wwwroot (включая папку dist) должны игнорироваться при маршрутизации engin, но, очевидно, это не работает так.Не могли бы вы увидеть, что я делаю не так?

Спасибо.

1 Ответ

0 голосов
/ 24 января 2019

Скорее всего, вам не хватает настройки root для вашего wwwroot. Это происходит везде, где находится точка входа вашей программы, и она создает хост. Здесь также указывается, какой класс является вашим стартапом, обычно Main.

У вас должно быть что-то похожее на следующее:

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

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