ASP.NET MVC路由和类似Slug的URL

时间:2011-02-22 23:58:10

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

目前我正在使用自定义类将路径转换为小写变体,这样可以顺利运行

实施例。 〜/ Services / Catering => 〜/服务/餐饮

我的问题是,如果我用更像slug的设置替换Pascal Case,我怎样才能让MVC正确解析URL

实施例。 〜/ Services / FoodAndDrink => 〜/服务/食品和饮料

我在继承的Route类中生成URL,重写GetVirtualPath()函数以转换为小写并用短划线和小写变体替换大写字母。

我想我必须拦截URL并在路由实际发生之前删除短划线,但我不确定它在MVC页面循环中的位置

1 个答案:

答案 0 :(得分:5)

想出来。当我不得不进行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;
    }
}