Как игнорировать маршруты в 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();
}