Asp.Net MVC 5 маршрут не получает удар - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть это в RouteConfig:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);


routes.MapRoute(
    name: "StoreSearch",
    url: "{storeName}",
    defaults: new { controller = "Search", action = "Store" }
);

По сути, у меня есть второй маршрут, поэтому, если я наберу localhost:9000/facebook, такого контроллера с именем facebook не будет, поэтому мой второй маршрутизатор долженподхватить facebook как storeName и нажать Store на моем контроллере Search.Но на данный момент я получаю 404.

Есть идеи, как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы должны разместить любой пользовательский маршрут над маршрутом Default.

Просто поменяйте местами заказ, и вы готовы идти

//before default route
routes.MapRoute(
    name: "StoreSearch",
    url: "{storeName}",
    defaults: new { controller = "Search", action = "Store" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
0 голосов
/ 28 сентября 2018

Если у вас есть определенный набор хранилищ или способ их проверки, вы можете добавить ограничение к маршруту.

Чтобы добавить общее ограничение с предикатом соответствия

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);
    }
}

, а затемв маршрут добавьте параметр

routes.MapRoute(
   name: "StoreSearch",
   url: "{storeName}",
   defaults: new { controller = "Search", action = "Store" }, constraints: 
//this could be new { controller ="pattern" } 
new {
     serverRoute = new ServerRouteConstraint(url =>
     {
//this will check that the route starts with a specific string in this case Settings
         return url.PathAndQuery.StartsWith("/Settings",
      StringComparison.InvariantCultureIgnoreCase);
     })
   });

. Например, проверьте: https://www.c -sharpcorner.com / UploadFile / dacca2 / route-constraints-in-mvc /

Кроме того, маршруты должны быть добавлены от наиболее специфических к наиболее общим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...