You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET WebForms项目:如何将Category.aspx页面URL问号改为斜杠

当然可以搞定!在ASP.NET WebForms项目里,我们有几种成熟的方案来实现这种更美观的URL结构,我给你一步步讲清楚:

方法1:使用ASP.NET路由(推荐,.NET 4.0及以上版本)

这是最现代、最原生的实现方式,不需要额外安装插件,而且能很好地和WebForms兼容。

  1. 注册路由规则
    打开项目的Global.asax文件,在Application_Start事件里添加路由注册代码:

    void Application_Start(object sender, EventArgs e)
    {
        // 注册分类页面的路由
        RouteTable.Routes.MapPageRoute(
            "CategoryRoute",          // 路由的唯一名称
            "Category.aspx/{cid}",    // 要匹配的优雅URL格式
            "~/Category.aspx"         // 对应的物理页面路径
        );
    }
    
  2. 修改页面获取参数的方式
    原来你用Request.QueryString["cid"]获取分类ID,现在需要改成从路由数据里读取:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.RouteData.Values["cid"] != null)
        {
            string categoryId = Page.RouteData.Values["cid"].ToString();
            // 这里继续用categoryId查询数据库即可
        }
    }
    

    这样用户访问MySite.com/Category.aspx/1时,就会自动映射到你的Category.aspx页面,同时原来的MySite.com/Category.aspx?cid=1也能正常工作,不会影响旧链接的兼容性。

方法2:使用IIS URL重写模块(适合低版本.NET)

如果你的项目基于.NET 4.0以下版本,或者不想修改页面代码,可以用IIS的URL重写模块来实现(需要先在服务器上安装这个模块)。

在项目的Web.config文件里添加重写规则:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="CategoryUrlRewrite" stopProcessing="true">
                <!-- 匹配类似 Category.aspx/1、Category.aspx/123 这样的URL -->
                <match url="^Category.aspx/(\d+)$" />
                <!-- 内部重写成带查询字符串的格式 -->
                <action type="Rewrite" url="Category.aspx?cid={R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

注意:这种方式下,你不需要修改页面里获取参数的逻辑,还是用原来的Request.QueryString["cid"]就行,非常适合不想动现有代码的场景

额外优化小技巧

如果你想让URL更简洁,比如去掉.aspx后缀,改成MySite.com/Category/1,只需要调整路由或重写规则的匹配路径:

  • 路由方式:把"Category.aspx/{cid}"改成"Category/{cid}"即可
  • 重写方式:把<match url="^Category.aspx/(\d+)$"改成<match url="^Category/(\d+)$"

最后提醒一下:

  • 路由方式需要项目基于.NET 4.0及以上
  • URL重写模块需要IIS 7.0及以上版本,并且服务器已经安装了URL Rewrite组件
  • 测试时可以用浏览器隐私窗口,避免旧URL缓存影响结果

内容的提问来源于stack exchange,提问作者Arad

火山引擎 最新活动