我已经部署了一个MVC Core 2.0应用程序,当我加载任何页面时,我可以看到他们的javascript和css文件没有指向正确的地址。
例如,/wwwroot/lib/bootstrap-table...
应为if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
。
但是,当通过Visual Studio进行本地调试时,该应用程序可以正常工作。
我的Startup.cs中有以下配置:
/wwwroot
然而,文件路径仍然没有/wwwroot
的前缀。为什么MVC找不到正确的文件路径?
Layout.cshtml文件包含以下内容:但是,如果我使用<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/lib/fullcalendar/dist/fullcalendar.css" />
<link rel="stylesheet" href="~/lib/fullcalendar/dist/fullcalendar.print.css" media="print" />
<link rel="stylesheet" href="~/css/site.css" />
<link rel="stylesheet" href="~/lib/bootstrap-table/src/bootstrap-table.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/lib/fullcalendar/dist/fullcalendar.min.css" />
<link rel="stylesheet" href="~/lib/fullcalendar/dist/fullcalendar.print.min.css" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
<link rel="stylesheet" href="~/lib/bootstrap-table/src/bootstrap-table.min.css" />
</environment>
为文件添加前缀,则在调试时不再找到文件:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
我可以在Program.cs文件中看到ContentRoot设置为CurrentDirectory,但是在部署到服务器时调试时它不起作用。
{{1}}
答案 0 :(得分:1)
WebHost.CreateDefaultBuilder()
已设置默认配置,即UseKestrel()
,UseContentRoot()
等。您无需再次调用它们。
相反,你只需要这个
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
app.UseStaticFiles()
使wwwroot
文件夹中的文件(默认情况下)可以使用。也就是说,http://<your_domain>/<your_app>/css/site.css
之类的请求会尝试在结构site.css
下获取wwwroot/css/
。
您无需在静态文件网址中手动附加wwwroot
。