Маршрутизация mvc.net: значения маршрутов в maproutes - PullRequest
1 голос
/ 21 сентября 2010

Мне нужны URL, такие как /controller/verb/noun/id, и мои методы действия будут глаголом + существительным. Например, я хочу, чтобы /home/edit/team/3 использовал метод действия

public ActionResult editteam(int id){}

В моем файле global.asax есть следующий маршрут.

routes.MapRoute(
              "test",
              "{controller}.mvc/{verb}/{noun}/{id}",
              new { docid = "", action = "{verb}"+"{noun}", id = "" }


            );

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

Ответы [ 2 ]

3 голосов
/ 21 сентября 2010

Попробуйте:

public class VerbNounRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        IRouteHandler handler = new MvcRouteHandler();
        var vals = requestContext.RouteData.Values;
        vals["action"] = (string)vals["verb"] + vals["noun"];
        return handler.GetHttpHandler(requestContext);
    }
}

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

routes.MapRoute(
   "test",
   "{controller}.mvc/{verb}/{noun}/{id}",
   new { docid = "", id = "" }
   ).RouteHandler = new VerbNounRouteHandler();
0 голосов
/ 21 сентября 2010

Попробуйте следующее, используйте это как маршрут:

routes.MapRoute(
              "HomeVerbNounRoute",
              "{controller}/{verb}/{noun}/{id}",
              new { controller = "Home", action = "{verb}"+"{noun}", id = UrlParameter.Optional }
            );

Затем вы просто помещаете свой метод actionresult:

public ActionResult editteam(int id){}

в Controllers / HomeController.cs, и он будет вызванкогда URL соответствует указанному маршруту.

...