C# 路由:当参数丢失时,如何重定向到url?

C# 路由:当参数丢失时,如何重定向到url?,c#,asp.net,webforms,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

我有这样的路线:

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" } });
但这不做任何重定向


我是否需要另一条路由转发到上面的路由,或者是否有更有效的方法执行此操作?

您可以设置这两条路由:

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");
编辑


如果您想实际重定向到新的URL,而不仅仅是提供正确的页面,您可以使用
CatchAll
路由重定向到一个页面(比如
redirect.aspx
),其唯一目的是解析
RouteData
对象中的数据,构建新的URL并重定向

您可以设置以下两个路由:

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");
编辑


如果您想实际重定向到新的URL,而不仅仅是提供正确的页面,您可以使用
CatchAll
路由重定向到一个页面(比如
redirect.aspx
),其唯一目的是解析
RouteData
对象中的数据,构建新的URL并重定向

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

如果您试图编写两个类似的链接,例如
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;
}

对不起,我可能在代码中犯了语法错误,但我希望你明白我的意思。不过,我可能完全误解了您的意思,因此请您澄清。

您的问题有点不清楚,但请允许我提供我通常会做的事情

如果您试图编写两个类似的链接,例如
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;
}

对不起,我可能在代码中犯了语法错误,但我希望你明白我的意思。不过,我可能完全误解了您的意思,因此请澄清。

这会保持url不变吗?如果用户进入网站并在
example.com
/,我希望他们被重定向到
example.com/cats/articles
,同样,如果他们键入
example.com/cats
,我希望他们被重定向到
example.com/cats/articles
。你是对的,它不会重定向。让我进一步研究一下。我所能想到的就是路由到一个页面,该页面的唯一目的是解析
RouteData
中的数据,并
从codebehind将
重定向到正确的url。这帮助我找到了一个解决方案。基本上,我使用的是带有默认值的catchall路由,将其转发到
default.aspx
,然后在codebehind中执行
响应。RedirectToRoute()
。@gin93r很酷,如果您想接受,我已经更新了我的答案,或者您可以用正确的解决方案编写自己的答案。这会保持url不变吗?如果用户进入网站并在
example.com
/,我希望他们被重定向到
example.com/cats/articles
,同样,如果他们键入
example.com/cats
,我希望他们被重定向到
example.com/cats/articles
。你是对的,它不会重定向。让我进一步研究一下。我所能想到的就是路由到一个页面,该页面的唯一目的是解析
RouteData
中的数据,并
从codebehind将
重定向到正确的url。这帮助我找到了一个解决方案。基本上,我使用的是带有默认值的catchall路由,将其转发到
default.aspx
,然后在codebehind中执行
响应。RedirectToRoute()
。@gin93r酷,如果你想接受,我已经更新了我的答案,或者你可以用正确的解决方案编写自己的答案。是的,我想你误解了。如果我不清楚,我道歉。基本上:如果用户进入网站并在
example.com
/,我希望他们被重定向到
example.com/cats/articles
,同样,如果他们键入
example.com/cats
,我希望他们被重定向到
example.com/cats/articles
。哦,对不起。我对webforms没有太多的了解,但是如果我不得不猜测的话,我会设置一个函数来测试输入中是否有“example.com”。如果“example.com”和“example.com/cats”的结果相同,只需测试“example.com”。再说一次,我通常不在c#这个领域工作,但我希望你能找到答案!是的,我想你误解了。如果我不清楚,我道歉。基本上:如果用户进入网站并在
example.com
/,我希望他们被重定向到
example.com/cats/articles
,同样,如果他们键入
example.com/cats
,我希望他们被重定向到
example.com/cats/articles
。哦,对不起。我对webforms没有太多的了解,但是如果我不得不猜测的话,我会设置一个函数来测试输入中是否有“example.com”。如果“example.com”和“example.com/cats”导致sam