我有一个带有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文件夹)中的所有文件,但是显然不能那样工作。 你能看到我做错了吗?
谢谢。
答案 0 :(得分:0)
您可能缺少将内容root设置为wwwroot的设置。无论您的程序入口点在哪里,它都会生成主机。您也可以在这里设置启动类,通常是Main。
您应该具有与以下内容相似的内容:
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();