문제

I'm trying to use the attribute routing in a new project, but I can't get it to work.

Here is what I have so far :

[RoutePrefix("Product")]
public class ProductController : Controller
{

    [Route("{id}/{title}", Name = "Product Details")]
    public ActionResult Index(int id = 0, string title = "")
    {
        Product p = Product.Get(id);

        return View(p);
    }
}

And here is my RouteConfig.cs :

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //routes.MapRoute(
        //    "Product Details",
        //    "Product/{id}/{title}",
        //    new { controller = "Product", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional }
        //);

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


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



    }
}

If I remove the Routing attributes and uncomment the first route in my RouteConfig.cs it works fine, but I'd like to stick with route attributes.

Any idea why it's not working correctly ?

The URL I want to use is : http://www.mydomain.com/Product/12345/ProductName

EDIT, here is my Application_Start()

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleMobileConfig.RegisterBundles(BundleTable.Bundles);

}
도움이 되었습니까?

해결책

Looks like its treating the {id} as an action.

Try this:

[Route("{id:int}/{title}", Name = "Product Details")]

Or this

[Route("Product/{id}/{title}", Name = "Product Details")]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top