路由:当参数丢失时如何重定向到URL?

时间:2017-08-24 13:01:58

标签: c# asp.net webforms

我有这样的路线:

example.com/{category}/articles.

没有路线
example.com/{category}
example.com/

我想将所有流量重定向到

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

我读过我可以使用RouteValueDictionary的默认值:

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

但这不会重定向。

我是否需要另一条路线转发上述路线,还是有更有效的方式来做这件事?

2 个答案:

答案 0 :(得分:0)

您可以设置以下两条路线:

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

抓住任何内容并重定向到您想要的页面。我只是假设您想引导用户,根据需要更改aspx部分。请记住,您可以使用{value}来访问用户编写的内容。

例如,如果他们想要导航到dogs并且您想要重定向到dogs/articles/ArticlesPage.aspx,则应使用:

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

修改

如果您想要实际重定向到新网址而不只是提供正确的网页,您可以使用CatchAll路线重定向到一个页面(例如Redirect.aspx),其唯一目的是从RouteData对象解析数据,构造新的URL和Redirect

答案 1 :(得分:0)

你问的是有点不清楚,但让我提供我通常做的事情。

如果您尝试创建它以便可以编写两个类似的链接,例如www.example.com/read/penguin/article/www.example.com/read/panda/article。我只想在中间写一个变量的整个字符串/ URL:

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

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

抱歉,我的代码可能犯了重大错误,但我希望你明白这一点。我可能完全误解了你,所以澄清一下会很感激。