Я пытаюсь настроить маршруты приложения MVC 5 с приложением Angular 7, чтобы они работали вместе, я делаю следующее:
Я создал новый класс:
{
private readonly Func<Uri, bool> _predicate;
public ServerRouteConstraint(Func<Uri, bool> predicate)
{
this._predicate = predicate;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName,
RouteValueDictionary values, RouteDirection routeDirection)
{
return this._predicate(httpContext.Request.Url);
}
}
После этого в файле RouteConfig.cs:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
// Set a constraint to only use this for routes identified as server-side routes
constraints: new
{
serverRoute = new ServerRouteConstraint(url =>
{
return (url.PathAndQuery.StartsWith("/Account", StringComparison.InvariantCultureIgnoreCase)
|| url.PathAndQuery.StartsWith("/Home", StringComparison.InvariantCultureIgnoreCase)
|| url.PathAndQuery.StartsWith("/Manage", StringComparison.InvariantCultureIgnoreCase)
|| url.PathAndQuery.StartsWith("/", StringComparison.InvariantCultureIgnoreCase));
})
});
// This is a catch-all for when no other routes matched. Let the Angular 2 router take care of it
routes.MapRoute(
name: "angular",
url: "{*url}",
defaults: new { controller = "Modify", action = "Index" } // The view that bootstraps Angular 2
);
он работал отлично, поэтому он ловил маршруты на стороне сервера, плавно переходил к угловым маршрутам. Проблема, когда я нахожусь на угловом шаблоне и нажимаю F5, чтобы обновить страницу, это дает мне 404 не найденную ошибку.
Я думаю, что угловые маршруты никогда не встречались.