如何忽略 MVC6 中的路由

How to ignore routes in MVC6

我正在开发一个非常简单的 SPA 风格的应用程序,我不想使用剃刀,所以我只需要它来提供 HTML 文件(来自 wwwroot 文件夹),除了当js 调用我的 API 控制器。在 Web API 2 中,您可以让路由器忽略 HTML 文件,以便直接提供它们,例如

config.Routes.IgnoreRoute("Html", "{whatever}.html/{*pathInfo}");

类似于此示例:http://www.strathweb.com/2014/04/ignoring-routes-asp-net-web-api/ IgnoreRoute 功能是未实现还是已更改?

目前如果我有 app.UseMvc();在我的 Startup.cs 中,任何对“/”的获取请求都会让我得到这个异常:

An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'Index' was not found. The following     locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml.
Microsoft.AspNet.Mvc.Rendering.ViewEngineResult.EnsureSuccessful()

但是当我在没有 MVC 的情况下离开它时,它会在您请求“/”时提供 index.html 文件 - 显然我的 API 控制器将无法工作。

我想如果您想要服务 index.html 即使您的 MVC 选项已启用?如果是这样,您必须更改一项设置。

当您启用 MVC 时,当您的 url 类似于 http://localhost:yourport 时,会添加一个默认路由来搜索 Home/Index。

当您禁用 MVC 时,它将服务 index.html,因为在这种情况下没有路由。

因此,如果您想在启用 MVC 时提供服务 index.html,请在使用 MVC 之前在 Configure 函数中添加以下内容。

app.UseDefaultFiles(new Microsoft.AspNet.StaticFiles.DefaultFilesOptions() { DefaultFileNames = new[] { "index.html" } });
// your UseMVC goes here.
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseMvc();
}