app.UseStaticFiles()无法正常工作。 Index.cshtml多次加载

时间:2019-01-24 16:51:32

标签: webpack .net-core

我有一个带有webpack的简单.net-core应用程序。 Webpack会为我生成css和js文件,并将其存储在wwwroot / dist文件夹中。

似乎每次从dist文件夹(_Layout.cshtml)加载css或js文件时,都会导致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中,我有他的代码:

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文件夹)中的所有文件,但是显然不能那样工作。 你能看到我做错了吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可能缺少将内容root设置为wwwroot的设置。无论您的程序入口点在哪里,它都会生成主机。您也可以在这里设置启动类,通常是Main。

您应该具有与以下内容相似的内容:

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

host.Run();