Asp.Net MVC: How do I enable dashes in my urls?

You can use the ActionName attribute like so:

[ActionName("My-Action")]
public ActionResult MyAction() {
    return View();
}

Note that you will then need to call your View file “My-Action.cshtml” (or appropriate extension). You will also need to reference “my-action” in any Html.ActionLink methods.

There isn’t such a simple solution for controllers.

Edit: Update for MVC5

Enable the routes globally:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapMvcAttributeRoutes();
    // routes.MapRoute...
}

Now with MVC5, Attribute Routing has been absorbed into the project. You can now use:

[Route("My-Action")]

On Action Methods.

For controllers, you can apply a RoutePrefix attribute which will be applied to all action methods in that controller:

[RoutePrefix("my-controller")]

One of the benefits of using RoutePrefix is URL parameters will also be passed down to any action methods.

[RoutePrefix("clients/{clientId:int}")]
public class ClientsController : Controller .....

Snip..

[Route("edit-client")]
public ActionResult Edit(int clientId) // will match /clients/123/edit-client

Leave a Comment