Routing optional parameters in ASP.NET MVC 5
Maybe you should try to have your enums as integers instead?
This is how I did it
public enum ECacheType
{
cache=1, none=2
}
public enum EFileType
{
t1=1, t2=2
}
public class TestController
{
[Route("{type}/{library}/{version}/{file?}/{renew?}")]
public ActionResult Index2(EFileType type,
string library,
string version,
string file = null,
ECacheType renew = ECacheType.cache)
{
return View("Index");
}
}
And my routing file
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// To enable route attribute in controllers
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
I can then make calls like
http://localhost:52392/2/lib1/ver1/file1/1
http://localhost:52392/2/lib1/ver1/file1
http://localhost:52392/2/lib1/ver1
or
http://localhost:52392/2/lib1/ver1/file1/1/
http://localhost:52392/2/lib1/ver1/file1/
http://localhost:52392/2/lib1/ver1/
and it works fine...
Felipe Oriani
Software Developer since 2004 with focus on back-end development. You can see more about my professional careear at Stack Overflow Careers Profile or LinkedIn profile.
Updated on October 31, 2020Comments
-
Felipe Oriani over 3 years
I am creating an ASP.NET MVC 5 application and I have some issues with routing. We are using the attribute
Route
to map our routes in the web application. I have the following action:[Route("{type}/{library}/{version}/{file?}/{renew?}")] public ActionResult Index(EFileType type, string library, string version, string file = null, ECacheType renew = ECacheType.cache) { // code... }
We only can access this URL if we pass the slash char
/
in the end ofurl
, like this:type/lib/version/file/cache/
It works fine but does not work without
/
, I get a404
not found error, like thistype/lib/version/file/cache
or this (without optional parameters):
type/lib/version
I would like to access with or without
/
char at the end ofurl
. My two last parameters are optional.My
RouteConfig.cs
is like this:public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes(); } }
How can I solve it? Make the slash
/
be optional too?