I have a controller method in ASP.NET MVC that looks like this:
public ActionResult GetAlbumPictures(int albumId)
{
var album = AlbumRepo.GetSingle(albumId);
var pictures = album.Pictures;
return View(pictures);
}
The routing for this method looks like this:
routes.MapRoute(null,
"pictures"
new { controller = "Album", action = "GetAlbumPictures" });
The user will use the following URL to get the pictures, filtered by the album ID:
GET http://server/pictures?albumid=10
However, I'd like to change the querystring parameter to just album instead of albumid:
GET http://server/pictures?album=10
This would mean that the controller method needs to be modified to:
public ActionResult GetPictures(int album)
{
...
}
However, this is not ideal because now the method has a parameter named album, which can be confused as an Album object instead of the ID of the Album.
My question is, is there any way of configuring ASP.NET MVC so that in the routing, it will receive a querystring parameter called album, but then pass it off to the controller as the albumId parameter?
P.S. I know that I can do this in the routing table:
routes.MapRoute(null,
"album/{albumId}/pictures",
new { controller = "Album", action = "GetAlbumPictures" });
But due to legacy issues, I have to make it work for the querystring method as well.