Vicky
Vicky

Reputation: 829

Customomized routing not working in MVC 5

My url: http:///Home/addorders //Working Fine

Need to hit like this: http:///addorders

I have added my customized route in RouteConfig: But it does not works for me

  public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute(
        "addorders", // Route name
        "addorders/{id}/{str}", // URL with parameters
        new { controller = "Home", action = "addorders", id = UrlParameter.Optional, str = UrlParameter.Optional },// Parameter defaults
        new[] { "AngularJsExample.Controllers" }
       );

    }
}

Upvotes: 1

Views: 5182

Answers (2)

Srinivas M
Srinivas M

Reputation: 36

MVC5 provides new feature called Attribute Routing. Instead of registering your routes in Routing Config, You can directly specify routing controller level or action level.

For example

RouteConfig.cs

using System.Web.Routing;
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

Home Controller code

[RoutePrefix("Test")]
[Route("{action=Index}")]// Default Route
public class HomeController : Controller
{
        public ActionResult Index()
        {
            return View();
        }

        [Route("HelloAbout")] //Test/Users/About
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";
            return View();
        }

        [Route("~/NewTest/Contact")] //To override the Route "Test" with "NewTest".... NewTest/Contact
        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";
            return View();
        }

        //[Route("home/{id?}")]
        public ActionResult Emp(int id)
        {
            return View();
        }
}

This code will change the controller and action name and also change the routing.

Upvotes: 2

Vinkal
Vinkal

Reputation: 2984

Add the new, more specific route before the default in the file (which determines the order it is added to the route dictionary). This is because routes are evaluated for a match to an incoming URL in order. The default MVC route is pretty general, and if route order is not carefully considered when adding additional routes to your project, the default route may inadvertently match a URL intended for a different handler.

Modified code:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
           routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
            "addorders", // Route name
            "addorders/{id}/{str}", // URL with parameters
            new { controller = "Home", action = "addorders", id = UrlParameter.Optional, str = UrlParameter.Optional },// Parameter defaults
               new[] { "AngularJsExample.Controllers" }
           );

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

Upvotes: 2

Related Questions