Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default route for root path using asp.net attribute routing

I'm using attribute routing from ASP.NET 5 RC, included in the Visual Studio 2013 RC release.

I'd like for the root path, /, to lead to the canonical /Home/Index path, but I can't find a way to do this with just attribute routes. Is it possible, and if not, how would I do it if I'm also using OWIN SelfHost? In other words, I'm setting up my own HttpConfiguration class manually in the WebApp.Start<T> method (where T has a Configure(IAppBuilder) method invoked at startup) and not going through the RouteTable.Routes object. Or should I be going through the RouteTable.Routes object? I haven't had much luck with that when I tried it...

EDIT: Here's what I've tried so far:

// normal Web API attribute routes
config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
   name: "DefaultWeb",
   routeTemplate: "{controller}/{action}",
   defaults: new { controller = "Home", action = "Index" }
);

The second try below looks a little dubious, since it's not clear how my HttpConfiguration object is related to the static RouteTable.Routes object:

// normal Web API attribute routes
config.MapHttpAttributeRoutes();

RouteTable.Routes.MapRoute(
   name: "DefaultWeb",
   url: "{controller}/{action}",
   defaults: new { controller = "Home", action = "Index" }
);
like image 437
gzak Avatar asked Sep 26 '13 04:09

gzak


People also ask

What is default route in asp net?

The default route table contains a single route (named Default). The Default route maps the first segment of a URL to a controller name, the second segment of a URL to a controller action, and the third segment to a parameter named id.

How do you use attribute routing?

To enable Attribute Routing, we need to call the MapMvcAttributeRoutes method of the route collection class during configuration. We can also add a customized route within the same method. In this way we can combine Attribute Routing and convention-based routing. A route attribute is defined on top of an action method.


2 Answers

You can set the default route for the app like this:

    [Route("~/", Name = "default")]
    public ActionResult Index() {
        return View();
    }
like image 122
Jay Douglass Avatar answered Oct 11 '22 17:10

Jay Douglass


For anyone who is using .NET Core 1.x, you'll need to do this as well as use Jay's answer above.

In your Startup.cs file, add this to your Configure method.

app.UseMvcWithDefaultRoute();

Then, any controller action you want as the default, put the attribute [Route("", Name = "default")]

like image 42
Nick George Avatar answered Oct 11 '22 17:10

Nick George