【问题标题】:ASP.NET MVC Routing and Slug Like URLsASP.NET MVC 路由和类似 Slug 的 URL
【发布时间】:2011-07-02 09:55:55
【问题描述】:

目前我正在使用自定义类将路径转换为小写变体,它可以顺利工作

例如。 ~/服务/餐饮 => ~/服务/餐饮

我的问题是,如果我将 Pascal Case 替换为更类似于 setup 的蛞蝓,我该如何让 MVC 正确解析 URL

例如。 ~/Services/FoodAndDrink => ~/services/food-and-drink

我在继承的 Route 类中生成 URL,覆盖 GetVirtualPath() 函数以进行小写转换并将大写字母替换为破折号和小写变体。

我想我必须截取 URL 并在路由实际发生之前删除破折号,但我不确定这在 MVC 页面周期中的哪个位置

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    想通了。当我不得不进行 URL 重写时,我想起了以前的项目。在 Global.asax.cs 文件中实现 Application_BeginRequest 方法(无论该类是什么),进行一些检查以确保您重写了正确的路径,然后使用 Context.RewritePath() 方法

    编辑: 由于要求提供代码...

    public class MvcApplication : System.Web.HttpApplication
    {
        //---snip---
    
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var url = RewriteUrl(Request.Path);
    
            Context.RewritePath(url);
        }
    
        //---snip---
    
        private string RewriteUrl(string path)
        {
            if (!path.Contains("Content") && !path.Contains("Scripts"))
            {
                path = path.Replace("-", "");
            }
    
            return path;
        }
    }
    

    【讨论】:

    • 添加了请求的代码。不过,我实际上改变了主意,因为事实证明创建蛞蝓相当有问题。但它实际上是针对移动网站的,因此 URL 格式目前不太重要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2017-10-01
    • 2010-11-22
    • 2010-11-13
    相关资源
    最近更新 更多