views:

89

answers:

1

This is my routing:

routes.MapRoute(null,
    "shelves/{id1}/products/{action}/{id2}",
    new { controller = "Products", action = "List", id1 = "", id2 = ""});

The thought is that you can do something like this:

http://server/shelves/23/products/edit/14

And be able to edit product 14 on shelf 23. Checking it with Route Debugger, the path matches the routing, but when I try to navigate to it with Route Debugger off, it shows me a HTTP 404 error. Does anybody know why this is happening?

+2  A: 

Well, for starters, that id1="" line is going to be problematic, because you can't make something optional that's not at the end.

I just tried it on my system, and it works just fine.

This is the route:

routes.MapRoute(
    "shelf-route",
    "shelves/{id1}/products/{action}/{id2}",
    new { controller = "Products", action = "List", id2 = "" }
);

This is the controller:

public class ProductsController : Controller
{
    public string List(string id1, string id2)
    {
        return String.Format("ID1 = {0}, ID2 = {1}", id1, id2);
    }
}

I tried URLs like:

http://localhost:14314/shelves/23/products/list/14
http://localhost:14314/shelves/23/products

And they worked just fine.

When you tried the URL with "edit" in it, did you remember to make an Edit action? If there's no Edit action, you'll get a 404.

Brad Wilson
Thanks for your answer. It turns out that I had my routes listed in the wrong order so it was matching another one first. I should've looked closer at the Route Debugger output.
Daniel T.