Создание маршрута ASP.Net MVC с косой чертой - PullRequest
0 голосов
/ 05 июля 2018

У меня есть действие в контроллере, которое выглядит следующим образом

public ActionResult Transactions(string type) {}

Чтобы получить доступ к этому контроллеру и передать значение свойства типа, я должен набрать

www.mysite / контроллер / транзакции? Тип = SomeType

но я хочу передать что-то вроде этого

www.mysite.com / контроллер / операции / SomeType

Таким образом, я создаю параметр конфигурации маршрута в файле RouteConfig.cs следующим образом

routes.MapRoute(
   name: "TransactionRoute",
   url: "user/transactions/{type}",
   defaults: new { controller = "user", action = "transactions", type = "made" },
   constraints: new { title = @"^[A-Za-z]+$" }
);

но теперь, если я передам такой URL

www.mysite.com / контроллер / сделки / сделано

значение типа строки в действии равно нулю

Мне разрешено делать это или я сделал что-то не так?

Вот мой файл routeconfig.cs

public static void RegisterRoutes(RouteCollection routes) {
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
    name: "TransactionRoute",
    url: "user/transactions/{type}",
    defaults: new {
      controller = "user", action = "transactions", type = "made"
    },
    constraints: new {
      title = @ "^[A-Za-z]+$"
    }
  );

  routes.MapRoute(
    name: "RateRoute",
    url: "rate/event/{id}",
    defaults: new {
      controller = "rate", action = "event"
    },
    constraints: new {
      id = @ "\d+"
    }
  );

  routes.MapRoute(
    name: "ReviewRoute",
    url: "rate/review/{id}",
    defaults: new {
      controller = "rate", action = "review"
    },
    constraints: new {
      id = @ "\d+"
    }
  );

  routes.MapRoute(
    name: "SpaceCleanRoute",
    url: "space/{id}",
    defaults: new {
      controller = "space", action = "index", id = UrlParameter.Optional
    },
    constraints: new {
      id = @ "\d+"
    }
  );

  routes.MapRoute(
    name: "SpacePendingRoute",
    url: "space/{id}/{pending}",
    defaults: new {
      controller = "space", action = "index", pending = UrlParameter.Optional
    },
    constraints: new {
      id = @ "\d+"
    }
  );


  routes.MapRoute(
    name: "PublicSpaceRoute",
    url: "space/public/{title}",
    defaults: new {
      controller = "space", action = "public"
    },
    constraints: new {
      title = @ "^[A-Za-z0-9-]+$"
    }
  );

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


}

1 Ответ

0 голосов
/ 05 июля 2018

www.mysite.com/user/transactions/sometype должно соответствовать TransactionRoute.

Также я не вижу необходимости в ограничении title на основе шаблона маршрута.

Снять ограничение title

routes.MapRoute(
   name: "TransactionRoute",
   url: "user/transactions/{type}",
   defaults: new { controller = "user", action = "transactions", type = "made" }   
);
...