I've been working on a large MVC application over the past month or so, but this is the first time I've ever needed to define a custom route handler, and I'm running into some problems. Basically I have two parameters to pass. The first one is required and the second one is optional.
I'm following this answer here.
Here is my custom route:
routes.MapRoute(
"MyRoute",
"{controller}/{action}/{param1}/{param2}",
new {
controller = "MyController",
action = "MyAction",
param1 = "",
param2 = "" // I have also tried "UrlParameter.Optional" here.
}
);
And my action method signature:
public ActionResult MyAction(string param1, string param2)
If I try the URL http://[myserver]/MyController/MyAction/Test1/Test2
then it works like I expect it to, with param1 = "Test1" and param2 = "Test2"
If I try the URL http://[myserver]/MyController/MyAction/Test1
then both parameters are null.
Hopefully somebody can tell me what I'm doing wrong here, because I'm lost.
Best Answer
I assume that you created new route and left the default one that is very similar to yours. You should be aware that collection of routes is traversed to find first matching route. So if you have left the default one:
above your route then it will match request to
http://[myserver]/My/MyAction/Test1
and callMyController.MyAction
and set "Text1" to parameter namedid
. Which will fail because this action is not declaring one namedid
.What you need to do is to move your route as first in routes list and make it more specific then it is now:
This will force all traffic routed trough
My
to match this route.