解析 URL 重写的查询字符串 asp.net 4.0

发布于 2024-12-03 09:38:52 字数 1066 浏览 1 评论 0原文

我需要使用 asp.net 4.0 中的路由功能解决 url 重写问题。 当用户输入 url 时

www.mysite.com/product.aspx?id=101

然后右侧页面显示,但假设我更改页面位置和名称,并且当用户输入 url 时,例如

www.mysite.com/product.aspx?id=101

那么将会出现页面未找到错误。

所以请告诉我如何使用 asp.net 4.0 路由功能解决这种情况。 是否可以 ?

我处理路由就像我的示例代码

 void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RouteTable.Routes.MapPageRoute
              ("Source", "Source/{ID}/{Title}", "~/Source.aspx");
        RouteTable.Routes.MapPageRoute
              ("Source1", "MyData/Source/{ID}/{Title}", "~/MyData/Source.aspx");
    }

上面的代码只是示例,我用这种方式进行 url 重写。这很容易。 但是,如果我需要通过路由解决上述 url 映射问题,那么我该怎么做以及需要在 Application_Start 事件中编写什么样的代码。

我想要当用户输入

www.mysite.com/product.aspx?id=101

那么它应该重定向到

www.mysite.com/prod/Myproduct.aspx?prodid=101

此网址。所以请指导我如何借助 asp.net 4.0 路由功能进行这种映射。

I need to solve a problem with url rewrite using routing feature in asp.net 4.0.
when user type url like

www.mysite.com/product.aspx?id=101

then right page shows but suppose if i change the page location and name and when user type url like

www.mysite.com/product.aspx?id=101

then page not found error will occur.

So please tell me how could I solve this situation using asp.net 4.0 routing feature.
is it possible ?

I handler routing like and my sample code

 void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RouteTable.Routes.MapPageRoute
              ("Source", "Source/{ID}/{Title}", "~/Source.aspx");
        RouteTable.Routes.MapPageRoute
              ("Source1", "MyData/Source/{ID}/{Title}", "~/MyData/Source.aspx");
    }

The code above is just sample and I this way do the url rewrite. It is very easy.
But if I need to solve my above url mapping problem with routing then how could I do so and what kind of code I need to write in Application_Start event.

I want when user type

www.mysite.com/product.aspx?id=101

then it should redirect to

www.mysite.com/prod/Myproduct.aspx?prodid=101

This url. So please guide me how could I do this kind of mapping with the help of asp.net 4.0 routing feature.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独自唱情﹋歌 2024-12-10 09:38:52

路由到包含查询字符串的路径的唯一方法是使用自定义处理程序。默认情况下,路由会传递 RouteData 中的变量。

所以你有3个选择。

1) 编写一个自定义路由处理程序来重写采用 RouteData 的路径并将其添加到查询字符串中。我为 这个问题中的这个

2) 更新 MyProduct.aspx 以检查 QueryString 中的产品 id(如果在 prodid 中找不到)并使用 MapPageRoute(新页面已访问原始查询字符串)。

RouteTable.Routes.MapPageRoute(
                    "product", 
                    "product.aspx",
                    "~/prod/myproduct.aspx");

3)使用IIS7重写规则

<rewrite>
    <rules>
        <rule name="product">
            <match url="product.aspx?id=([0-9]+)" />
            <action type="Rewrite" url="prod/myproduct.aspx?prodid={R:1}" />
        </rule>
    </rules>
</rewrite>

The only way you can route to a path containing a querystring is to use a custom handler. By default routing passes variables in the RouteData.

So you have 3 options.

1) write a custom route handler to rewrite the path taking RouteData and adding it to the querystring. I wrote some code similar code for this in this question.

2) update MyProduct.aspx to check for product id in the QueryString if not found in prodid and use MapPageRoute (the new page has access the the original querystring).

RouteTable.Routes.MapPageRoute(
                    "product", 
                    "product.aspx",
                    "~/prod/myproduct.aspx");

3) use IIS7 rewrite rules

<rewrite>
    <rules>
        <rule name="product">
            <match url="product.aspx?id=([0-9]+)" />
            <action type="Rewrite" url="prod/myproduct.aspx?prodid={R:1}" />
        </rule>
    </rules>
</rewrite>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文