MVC创建虚拟路径

时间:2015-08-03 19:47:49

标签: asp.net-mvc url

第1部分

我正在创建一个从数据库中提取文章的MVC网站。我试图复制WordPress的一个功能。我的主网址类似于" http://127.0.0.1/Articles/Index"。我可以轻松创建一个可以加载文章的网址:" http://127.0.0.1/Articles/Index?id=1234"。

但该网址对搜索引擎来说并不是很好,所以我想创建一个虚拟网址:" http://127.0.0.1/Articles/Index/Computer-Science/Machine-Language"。

这将从数据库中的计算机科学类别加载标题为“机器语言”的文章。将有一个虚拟URL" /计算机科学/机器语言"在数据库中。

无论如何,我的代码工作正常,它从数据库中提取正确的文章,但浏览器显示404错误,而不是显示文章,因为" /计算机科学/机器语言"实际上并不存在。

所以我的问题是,如何阻止浏览器抛出404错误?浏览器认为它是真正的URL,但URL只存在于我的数据库中。

第2部分

我还有另外两个问题。首先,有没有办法可以从URL中删除索引?它只是/文章/计算机科学/机器语言?

第二,无论如何,我是否可以强制URL全部为小写? MVC似乎在我的URL中使用大写字母,我不喜欢它。我已经被告知它与搜索引擎优化相混淆,因为谷歌认为/计算机科学和/计算机科学是两个不同的URL,它们有重复的数据并且会惩罚我的网站。

谢谢。

1 个答案:

答案 0 :(得分:0)

我能够使用多种路由方法解决它。

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Article",
            url: "{controller}/{action}/{category}/{article}",
            defaults: new { controller = "Article", action = "Index", category = "", article = "" }
        );