简体   繁体   中英

Routing: how do I redirect to a url when a parameter is missing?

I have routes like this:

example.com/{category}/articles.

There isn't a route for

example.com/{category}
example.com/

I want to redirect all that traffic to

example.com/{category}/articles with a default value.

I've read that I can use default values with a RouteValueDictionary :

routes.MapPageRoute("ArticlesAll", "{category}/articles/", "~/ArticlesPage.aspx", false, new RouteValueDictionary { { "category", "cats" } });

But that doesn't do any redirecting.

Would I need another route to forward to the one above or is there a more efficient way of doing this?

You can setup these two routes:

routes.MapPageRoute("ArticlesAll", "{category}/articles/{*value}", "~/ArticlesPage.aspx");
routes.MapPageRoute("CatchAll", "{*value}", "~/ArticlesPage.aspx");

to catch anything and redirect to your desired page. I just assumed where you want to lead your users, change the aspx part as needed. Keep in mind that you can use {value} to access the whatever the user wrote.

For example if they wanted to navigate to dogs and you wanted to redirect to dogs/articles/ArticlesPage.aspx , you should use:

routes.MapPageRoute("CatchAll", "{*value}", "~/{value}/articles/ArticlesPage.aspx");

EDIT

If you want to actually redirect to the new URL and not just serve up the right page, you can use the CatchAll route to redirect to a page (say Redirect.aspx ) that's sole purpose is to parse data from the RouteData object, construct the new URL and Redirect .

What you are asking is a bit unclear, but let me offer what I usually do.

If you are trying to make it so that two similar links can be written, for example www.example.com/read/penguin/article/ and www.example.com/read/panda/article . I would just write the whole string / URL with a variable in the middle:

private string destination = "penguin";
private string url = "www.example.com/read/" + destination + "/article/";

void Test () {
    destination = "lion";
    text.URL = url;
}

Sorry, I may have made gramatical mistakes in my code, but I hope you get the point. I may have completely misunderstood you though, so clarification would be appreciated.

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