简体   繁体   中英

ASP.NET 4 routing question

I am trying to do the following in my Global.asax file:

At the moment i have to define my route like this:

routes.MapPageRoute(
    "ViewPage", 
    "pages/{slug}",
    "~/viewpage.aspx",
    false
);

Notice the word pages before the {slug}

Now if i define it like this:

routes.MapPageRoute (
    "ViewPage", 
    "{slug}",
    "~/viewpage.aspx",
    false
);

It does not work.

My CSS and JS files wont load, i get a 404.

But, if i do this:

routes.MapPageRoute (
    "ContactPage", 
    "contact",
    "~/contact.aspx",
    false
);

It works fine??

Basically i want my urls to look like this:

example.com/contact or example.com/about-us and it is all served dynamically from the database based on the {slug}.

Can anyone help?

Using:

RouteTable.Routes.MapPageRoute("slug", 
                "{slug}",
                "~/page.aspx", false);

Works fine for me. What you need to make sure is that your routes are in the right order; specific to general but also have an ignore one for resources etc. otherwise they'll be routed there too.

Hope that helps

Edit

Ignore routes like:

RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");

How to ignore route in asp.net forms url routing

Maybe something like this, although I cannot test it at the moment. From what I understand it should tell the routing handler to ignore anything in those directories.

routes.Add(new Route("images/", new StopRoutingHandler()));
routes.Add(new Route("js/", new StopRoutingHandler()));
routes.Add(new Route("css/", new StopRoutingHandler()));

Thanks guys!!

I had to re-order my routes.

I use a HttpHandler to combine and gzip my js and css files. This was being added last like so:

const string combine = "~/code/httphandlers/httpcombiner.ashx";
RegisterRoutes(RouteTable.Routes);
RouteTable.Routes.Add(new Route("combine", new HttpHandlerRoute(combine)));

I switched these around to:

const string combine = "~/code/httphandlers/httpcombiner.ashx";
RouteTable.Routes.Add(new Route("combine", new HttpHandlerRoute(combine)));
RegisterRoutes(RouteTable.Routes);

I added the StopRoutingHandler for the webresource.axd and now it all works beautiful!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM