C# ASP.NET MVC路由和Slug-Like URL

C# ASP.NET MVC路由和Slug-Like URL,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,目前,我正在使用一个自定义类来将路径转换为小写形式的变体,它可以顺利地工作 例如~/服务/餐饮=>~/服务/餐饮 我的问题是,如果我用一个更像slug的设置替换Pascal的情况,如何让MVC正确解析URL 例如~/Services/FoodAndDrink=>~/Services/food and drink 我在继承的Route类中生成URL,重写GetVirtualPath()函数以进行小写转换,并用破折号和小写变量替换大写字母 我想我必须截取URL并在路由实际发生之前删除破折号,但我不确

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

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

我的问题是,如果我用一个更像slug的设置替换Pascal的情况,如何让MVC正确解析URL

例如~/Services/FoodAndDrink=>~/Services/food and drink

我在继承的Route类中生成URL,重写GetVirtualPath()函数以进行小写转换,并用破折号和小写变量替换大写字母


我想我必须截取URL并在路由实际发生之前删除破折号,但我不确定在MVC页面周期中这会发生什么。记得以前的一个项目,当时我不得不重写URL。在Global.asax.cs文件中实现应用程序_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。在Global.asax.cs文件中实现应用程序_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;
    }
}

添加了请求的代码。事实上,我改变了主意,因为创建slug被证明是相当困难的。不过,这实际上是针对移动站点的,因此URL格式在添加请求的代码时就不那么重要了。事实上,我改变了主意,因为创建slug被证明是相当困难的。不过,这实际上是针对移动站点的,因此URL格式目前不太重要