我需要像/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 = "" }
);
网址与路由正确匹配,但我不知道应该在哪里构建动作参数,该参数是被调用的动作方法的名称。
答案 0 :(得分:3)
尝试:
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();
答案 1 :(得分:-1)
尝试以下操作,将其用作路线:
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与提供的路径匹配时,将调用它。