0

I have following methods in my MVC controller:

[HttpGet]
public ActionResult Add(Guid b)
{
    ViewBag.Title="Add Location";
    //init some info
    return View("Edit",<Model>);
}

[HttpGet]
public ActionResult Edit(Guid l)
{
    ViewBag.Title="Edit Location";
    //get object from db
    return View("Edit",<Model>);
}

Following is the route registration:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
   defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Now when I try to access following two routes:

1. http://localhost:60732/Location/Add?b=512f770f-51c3-4791-8eba-61fe753e2a83
2. http://localhost:60732/Location/Edit?l=512f770f-51c3-4791-8eba-61fe753e2a83

First one works but 2nd gives 404.

I have also tried AttributeRouting with following routes:

[HttpGet]
[Route("Location/AddLocation/{g}")]
public ActionResult Add(Guid g)

[HttpGet]
[Route("Location/EditLocation/{l}")]
public ActionResult Edit(Guid l)

Again,

 http://localhost:60732/Location/AddLocation/512f770f-51c3-4791-8eba-61fe753e2a83

works but

 http://localhost:60732/Location/EditLocation/512f770f-51c3-4791-8eba-61fe753e2a83

does not.

What am I doing wrong?

Strangely, if I pass wrong Guid like:

 http://localhost:60732/Location/EditLocation/512f770f

It gives following error:

The parameters dictionary contains a null entry for parameter 'l' of non-nullable type
'System.Guid' for method 'System.Web.Mvc.ActionResult Edit(System.Guid)' in
'AppointmentScheduler.Controllers.LocationController'. An optional parameter must be a
reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
TheVillageIdiot
  • 40,053
  • 20
  • 133
  • 188

2 Answers2

2

There is nothing wrong with your routing here. However, the code in your Edit method must itself be throwing a 404 error by throwing HttpNotFound.

DavidG
  • 113,891
  • 12
  • 217
  • 223
1

I just hope this is last WTF of 2014. I pass the id (Guid) and try to fetch object from db. Actually, it is not able to find it and I'm returning: HttpNotFound (I think copied from some API method). So I am always getting 404 for this route.

TheVillageIdiot
  • 40,053
  • 20
  • 133
  • 188