Если у вас также есть маршруты MVC, попробуйте это для вашего route.config:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new
{
// Add all routes we need MVC to handle here
serverRoute = new ServerRouteConstraint(url =>
{
return url.PathAndQuery.StartsWith("/qbo",
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 = "Home", action = "Index" } // The view that bootstraps Angular 2+
);
}
Вот класс ограничений маршрута:
using System;
using System.Web;
using System.Web.Routing;
namespace Web
{
public class ServerRouteConstraint : IRouteConstraint
{
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);
}
}
}
Я использовал это длядолгое время не знал, на какой блог я мог быть вдохновлен.