RouteTable.Routes.MapPageRoute("privacy", "Privacy", "~/about/about.aspx", false); RouteTable.Routes.MapPageRoute("about", "公司介绍/{Channel}", "~/about/about.aspx", false); 第一个应对映射到第二个怎么实现
时间: 2023-07-02 09:12:18 浏览: 146
如果你想让第一个路由映射到第二个路由,可以将第一个路由的 URL 修改为 "公司介绍/Privacy",即与第二个路由的 URL 规则一致。修改后的代码如下所示:
```csharp
RouteTable.Routes.MapPageRoute("privacy", "公司介绍/Privacy", "~/about/about.aspx", false);
RouteTable.Routes.MapPageRoute("about", "公司介绍/{Channel}", "~/about/about.aspx", false);
```
这样就可以让 "/公司介绍/Privacy" 请求映射到 "~/about/about.aspx" 页面,并且传递的参数为 Channel="Privacy"。注意,如果你修改了已有的路由,可能会对现有的请求产生影响,需要进行充分的测试和验证。
相关问题
Privacy前面不能带公司介绍
如果你希望不修改第一个路由的 URL,而仍然能够让 "Privacy" 请求映射到 "~/about/about.aspx" 页面,并且传递的参数为 Channel="Privacy",可以通过以下两种方式实现:
1. 修改第二个路由的 URL 规则为 "Privacy",并将第二个路由的优先级降低,如下所示:
```csharp
RouteTable.Routes.MapPageRoute("about", "公司介绍/{Channel}", "~/about/about.aspx", false);
RouteTable.Routes.MapPageRoute("privacy", "Privacy", "~/about/about.aspx", false, new RouteValueDictionary { { "Channel", "Privacy" } });
```
这样就可以让 "Privacy" 请求映射到 "~/about/about.aspx" 页面,并且传递的参数为 Channel="Privacy"。注意,需要将第二个路由的优先级降低,否则会优先匹配第二个路由,而不会匹配第一个路由。
2. 在页面代码中判断请求的 URL 是否为 "Privacy",如果是,则手动将参数设置为 Channel="Privacy",如下所示:
```csharp
protected void Page_Load(object sender, EventArgs e)
{
string channel = Page.RouteData.Values["Channel"] as string;
if (string.IsNullOrEmpty(channel) && Request.Url.PathAndQuery.EndsWith("Privacy"))
{
Page.RouteData.Values["Channel"] = "Privacy";
}
}
```
这样就可以让 "Privacy" 请求映射到 "~/about/about.aspx" 页面,并且传递的参数为 Channel="Privacy"。注意,需要在页面代码中手动判断和设置参数,不够优雅。
阅读全文