MVC核心根路径不以wwwroot为前缀

时间:2017-12-04 19:06:58

标签: c# asp.net-core

我已经部署了一个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找不到正确的文件路径?

enter image description here

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}}

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