Маршрутный шаблон ASP.NET Core MVC не работает с идентичной настройкой другой работающей - PullRequest
0 голосов
/ 30 августа 2018

Я разрабатываю три веб-приложения, которые являются частью более крупной системы. Это одностраничные приложения с API, и поэтому у меня есть подстановочный маршрут для действий, не связанных с API, который указывает на мой основной контроллер.

Для двух из этих приложений это работает нормально, но для третьего перенаправление не работает, и я просто получаю 404 при попытке получить доступ к внешнему маршруту. Насколько я могу судить, установка идентична, и я совершенно озадачен тем, почему она не работает.

Я использую скриншоты, а не фрагменты кода, чтобы я мог показывать установку рядом (работа слева, не работа справа).

Как видите, ключевые разделы кода идентичны в обоих приложениях, и все же один работает, а другой нет.

Что я пропустил? Где еще мне посмотреть? И любое руководство о том, как я могу отладить это, будет с благодарностью.

.csproj enter image description here

Startup.cs enter image description here

Это ключевой бит кода, который, как вы можете видеть, идентичен в обоих местах:

app.UseMvc(routes =>
{
    routes.EnableDependencyInjection();
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api", StringComparison.OrdinalIgnoreCase), builder =>
{
    builder.UseMvc(routes =>
    {
        routes.MapRoute("spa-fallback", "{*url}", new { controller = "Home", action = "Index" });
    });
});

Program.cs enter image description here

Web.config enter image description here

1 Ответ

0 голосов
/ 23 октября 2018
app.UseMvc(routes =>
{
    routes.EnableDependencyInjection();
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api", 
StringComparison.OrdinalIgnoreCase), builder =>
{
    builder.UseMvc(routes =>
    {
        routes.MapRoute("spa-fallback", "{*url}", new { controller = "Home", action = 
"Index" });
    });
});

Это было решено. Я посмотрел на код выше, который был маршрутизирован с контроллером дома. Это заставило меня взглянуть на HomeController. Разница между приложениями заключается в том, что у того, кто не работает, есть атрибут MVC Route с добавленным «/» в контроллере Home.

[Route("/")] // remove this line
public class HomeController : Controller
...