Передача параметров через URL в приложении ASP.NET MVC - PullRequest
0 голосов
/ 03 февраля 2011

Мне нужен доступ к параметру без имени.Пример: у меня тест контроллера, я хочу получить «данные» в mysite.com/test/data.Без вызова данных действия.Я знаю, как это сделать, пропустив это через действие Index.

public ActionResult Index(string id)

Таким образом, мне нужно будет всего лишь набрать mysite.com/test/Index/data, чтобы получить «данные», но я не хочу вводить Index,

Кто-нибудь знает, как это сделать?

РЕДАКТИРОВАТЬ:

Большое спасибо @andyc!

AndyC Я использовал то, что вы сказали, и создалтестовое задание.Это сработало = D

Теперь я могу набрать mysite.com/something и, если что-то не является контроллером, оно перенаправляет на страницу моего профиля.

Это то, что работает для меня

routes.MapRoute(
      "Profile",
      "{id}",
      new { Controller = "Profile", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

1 Ответ

1 голос
/ 03 февраля 2011

Настройка пользовательского маршрута

В вашем файле global.asax укажите (внутри метода RegisterRoutes):

routes.MapRoute(
    "MyShortRoute",
    "view/{id}",
    new { Controller = "test", action = "Index" }
);

Первый параметр - это имя, второй - формат URL, а последний параметр - значения по умолчанию (в этом случае, если вы оставите id пустым, по умолчанию будет id 0.

Обратите внимание, что я не использую test / {id}, поскольку это также соответствует test / Edit, где edit - это действие, которое вы не хотите передавать в качестве параметра (я не могу придумать другой способ избежать этого особенно если вы используете строки вместо целочисленных значений для параметров).

Не забудьте правильно упорядочить маршруты в файле global.asax. Поставьте более конкретные маршруты перед менее конкретные маршруты. Когда система ищет маршрут, по которому она идет, она не пытается найти наиболее конкретное совпадение, но вместо этого она начинает сверху и использует первое найденное совпадение.

Следовательно, это плохо:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "test", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    "Specific",
    "test/{id}",
    new { controller = "test", action = "Index", id = 0 } 
);

В этом примере, если вы перейдете к параметру test / somevalue, он будет соответствовать записи FIRST, а это не то, что вам нужно, предоставляя вам testcontroller и действие somevalue.

(Когда вы добавляете более конкретный маршрут, вы захотите, чтобы он был ближе к вершине, и определенно до вашего значения по умолчанию).

...