目前我正在使用自定义类将路径转换为小写变体,这样可以顺利运行
实施例。 〜/ Services / Catering => 〜/服务/餐饮
我的问题是,如果我用更像slug的设置替换Pascal Case,我怎样才能让MVC正确解析URL
实施例。 〜/ Services / FoodAndDrink => 〜/服务/食品和饮料
我在继承的Route类中生成URL,重写GetVirtualPath()函数以转换为小写并用短划线和小写变体替换大写字母。
我想我必须拦截URL并在路由实际发生之前删除短划线,但我不确定它在MVC页面循环中的位置
答案 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;
}
}