Использование сопоставителя маршрутов на основе атрибутов ASP.NET MVC - PullRequest
2 голосов
/ 20 июня 2010

В моем приложении ASP.NET MVC я хочу использовать этот сопоставитель маршрутов на основе атрибутов MVC ASP.NET , впервые объявленный здесь .

Пока я понимаю, как реализовать код, который его использует, но я столкнулся с несколькими вопросами, на которые, я думаю, смогут ответить те, кто использовал этот картограф на основе атрибутов в прошлом.

  • Как использовать его с ActionResults для HTTP POST s? Другими словами, как он работает с отправкой форм и тому подобным? Должен ли я просто ввести URL-адрес метода GET или использовать URL-адрес метода GET без каких-либо параметров (как в HTTP POST они не передаются через URL-адрес)?
  • Как использовать его с «параметрами строки URL-запроса»? Можно ли настроить атрибут для сопоставления с маршрутом, например /controller/action?id=value, а не /controller/action/{id}?

Заранее спасибо.

1 Ответ

1 голос
/ 20 июня 2010

Как мне использовать его с ActionResults что за HTTP POST?

Вы украшаете действие, которое вы публикуете, с атрибутом [HttpPost]:

[Url("")]
public ActionResult Index() { return View(); }

[Url("")]
[HttpPost]
public ActionResult Index(string id) { return View(); }

Если вы решили присвоить действию POST другое имя:

[Url("")]
public ActionResult Index() { return View(); }

[Url("foo")]
[HttpPost]
public ActionResult Index(string id) { return View(); }

Вам необходимо указать это имя в ваших вспомогательных методах:

<% using (Html.BeginForm("foo", "home", new { id = "123" })) { %>

Как мне использовать его с "URL-адресом строки параметры "?

Параметры строки запроса не являются частью определения маршрута. Вы всегда можете получить их в действии контроллера либо в качестве параметра действия, либо из Request.Params.

Что касается параметра id, он настроен в Application_Start, поэтому, если вы хотите, чтобы он отображался в строке запроса, а не был частью маршрута, просто удалите его из этого определения маршрута:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoutes();
    routes.MapRoute(
        "Default",
        "{controller}/{action}",
        new { controller = "Home", action = "Index" }
    );
}
...