jeb*_*ar8 13 c# asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-3
在过去一个月左右的时间里,我一直在研究一个大型MVC应用程序,但这是我第一次需要定义一个自定义路由处理程序,而且我遇到了一些问题.基本上我有两个参数要通过.第一个是必需的,第二个是可选的.
我在这里听到这个答案.
这是我的自定义路线:
routes.MapRoute(
"MyRoute",
"{controller}/{action}/{param1}/{param2}",
new {
controller = "MyController",
action = "MyAction",
param1 = "",
param2 = "" // I have also tried "UrlParameter.Optional" here.
}
);
Run Code Online (Sandbox Code Playgroud)
我的动作方法签名:
public ActionResult MyAction(string param1, string param2)
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用URL,http://[myserver]/MyController/MyAction/Test1/Test2那么它就像我期望的那样工作,param1 ="Test1"和param2 ="Test2"
如果我尝试URL,http://[myserver]/MyController/MyAction/Test1则两个参数都为空.
希望有人可以告诉我这里我做错了什么,因为我迷路了.
Raf*_*fal 13
我假设您创建了新路由并保留了与您的路由非常相似的默认路由.您应该知道遍历路由集合以找到第一个匹配的路由.所以如果你离开了默认的:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
在您的路线上方,它将匹配请求http://[myserver]/My/MyAction/Test1和调用MyController.MyAction并将"Text1"设置为名为的参数id.哪个会失败,因为此操作未声明一个命名id.
您需要做的是将您的路线作为路线列表中的第一个路线移动,并使其更具体,然后现在:
routes.MapRoute(
"Route",
"My/{action}/{param1}/{param2}",
new
{
controller = "My",
action = "MyAction",
param1 = "",
param2 = ""
});
Run Code Online (Sandbox Code Playgroud)
这将强制所有路由的流量My匹配此路由.
| 归档时间: |
|
| 查看次数: |
21672 次 |
| 最近记录: |