【问题标题】:Case Sensitive Routing in MVC4MVC4 中的大小写敏感路由
【发布时间】:2013-11-03 03:41:30
【问题描述】:

有谁知道 MVC 中是否可以有区分大小写的路由。

我想如下指向不同的文章。

例子

http://my.ie/uRl --> 文档 1

http://my.ie/Url --> 文档 2

很想知道这是否可以做到。

【问题讨论】:

  • 我从未见过 url 区分大小写
  • @Murali:真的吗?因为 IIS 不区分大小写,但基于 *nix 的服务器已经有很长一段时间了(主要与文件系统区分大小写有关——foo.txt 与 FOO.txt 不同)

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


【解决方案1】:

您可以像这样使用路由器约束和正则表达式:

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        new { id = @"\d+", action=@"[A-Z]+"  }  //Parameter constraints
        );

所以,只要考虑一下您想要在正则表达式方面应用的约束

【讨论】:

    【解决方案2】:

    鉴于 MVC 是一个 IIS 平台(而 Windows 本身是不敏感的),我不知道您是否会走运。但是,如果您使用它来提供文件,您可以创建一个后备路由,然后将其更进一步(并适当地解析它)。例如

    routes.MapRoute(
      "File_Fetch",
      "{filename}",
      new { controller = "File", action = "Fetch", filename = UrlParameter.Optional },
      new { filename = @"^.+$" }
    );
    
    public class FileController : Controller
    {
        public ActionResult Fetch(String filename)
        {
            // /Url -> filename = "Url"
            // /uRl -> filename = "uRl"
            return File(...);
        }
    }
    

    因此,现在您可以询问传入参数并按照您认为合适的方式提供它,而不是尝试使用路由来区分 cASE。

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2016-11-18
      相关资源
      最近更新 更多