Параметры ASP.NET MVC 4, разделенные прямыми прорезями “/” не передают аргументы правильно

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

То есть, я ищу, чтобы потреблять URL-адрес, например:

http://www.foo.bar/controller/action?arg1=a&arg2=b&arg3=c 

Таким образом:

 http://www.foo.bar/controller/action/a/b/c 

В настоящее время я работаю (в основном), используя следующее:

 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 } ); routes.MapRoute( name: "Sandbox", url: "Sandbox/{action}/{*args}", defaults: new { controller = "Sandbox", action = "Index", args = UrlParameter.Optional } ); } 

Однако, если я передам что-то вроде

 http://www.foo.bar/Sandbox/Index/a 

или же

 http://www.foo.bar/Sandbox/Index/a/ 

Контроллер и действие соответствующим образом называются:

 public ActionResult Index(string args) { return View(); } 

но args равно null.

Однако, если я передам что-то вроде:

 http://www.foo.bar.com/Sandbox/Index/a/b 

Тогда args является «a / b», если требуется.

Я искал SO и остальную часть Интернета, но, похоже, не нашел решения.

Есть ли что-то очевидное, что мне не хватает, чтобы исправить это поведение?

Я ищу неправильную терминологию?

Примечание. Я смог воспроизвести эту проблему с помощью нового приложения ASP.NET с использованием проверки подлинности Windows. Все, что было сделано:

  1. Создание приложения ASP.NET в VS 2015
  2. Выберите MVC
  3. Нажмите «Изменить аутентификацию»
  4. Выберите Аутентификацию Windows
  5. Добавьте вышеуказанный маршрут карты в RouteConfig.cs
  6. Создайте SandboxController.cs и добавьте параметр args в Index
  7. Создайте представление Index.cshtml
  8. Повторите проблему, используя http: // localhost: 55383 / Sandbox / Index / a
  9. Повторите ожидаемое поведение с помощью http: // localhost: 55383 / Sandbox / Index / a / b

Любая помощь очень ценится. Спасибо! Аналогичный вопрос, но мне не помогает: URL-адреса с косой чертой в параметре?

Ничего … Вот проблема …

Сначала MapRoute вызывает маршрут по умолчанию. Чтобы исправить это, я просто поменял маршрут карты по умолчанию с помощью маршрута «Песочница».

Я надеюсь, что это помогает кому-то.

Рабочее решение:

 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Sandbox", url: "Sandbox/{action}/{*args}", defaults: new { controller = "Sandbox", action = "Index", args = UrlParameter.Optional } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }