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

And*_*ess 1 c# asp.net-mvc asp.net-mvc-routing

目前我正在使用自定义类将路径转换为小写变体,这样可以毫无障碍地工作

防爆.〜/服务/餐饮=>〜/服务/餐饮

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

防爆.〜/ Services/FoodAndDrink =>〜/服务/食品和饮料

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

我想我会拦截URL和路由实际发生之前只是删除破折号,但我不知道在哪里这个下降的MVC页面周期

And*_*ess 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;
    }
}
Run Code Online (Sandbox Code Playgroud)