Как игнорировать маршруты в 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 не будут работать, хотя.

Ответы

Ответ 1

Я думаю, если вы хотите обслуживать index.html, даже если включена опция MVC? Если это так, вам нужно изменить одну настройку.

При включении MVC по умолчанию добавляется маршрут по умолчанию для поиска Home/Index, когда ваш URL-адрес похож на http://localhost:yourport.

Когда вы отключите MVC, он будет обслуживать index.html, поскольку в этом случае нет маршрута.

Итак, если вы хотите обслуживать index.html, когда MVC включен, добавьте следующее в функцию Configure перед использованием MVC.

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

Ответ 2

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

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