ASP.net MVC路由参数

本文关键字:参数 路由 MVC net ASP | 更新日期: 2023-09-27 18:05:20

我的路由是这样的:

http://localhost:1936/user/someOne/##feed%233dbfc1b3-44b4-42b4-9305-4822ac151527

我的路由配置如下:

   routes.MapRoute("Profile", "user/{userName}/{treningId}",
            new { controller = "Profile", action = "Index", userName = UrlParameter.Optional, treningId = UrlParameter.Optional }
            );

控制器中的Action像这样:

public ActionResult Index(string username, string treningId)
    {
      //more code here
    }

但是我不能得到这部分:##feed%233dbfc1b3-44b4-42b4-9305-4822ac151527,当我调试代码时,我看到treningId为null。

我的问题是如何在##之后获得URL的一部分?

ASP.net MVC路由参数

这是不可能的,因为请求中不包含哈希值;它们保留给客户端在url中使用(通常用于标记文档/部分中的特定位置)。

你有两个选择。将哈希字符编码为%23:

%23%23feed%233dbfc1b3-44b4-42b4-9305-4822ac151527

你不能。

浏览器根本不会将第一个#之后的内容发送到服务器(您可以通过在浏览器中使用调试器来检查浏览器和服务器之间的流量来验证这一点)。这是因为#(哈希)字符在HTTP中有特殊的含义。

你为什么不直接

  • 使用常规查询参数(例如http://localhost:1936/user/someOne?myparameter=feed%233dbfc1b3-44b4-42b4-9305-4822ac151527),或者
  • 选择除"##"以外的其他分隔符。

您编写URL的方式,浏览器不会提交片段标识符的任何部分- URL的哈希部分。因此,你的MVC应用程序将永远不会接收到该值,因此将始终将其作为null

要使该值对MVC可用,转义#以避免它们标记URL的片段部分的开始