繁体   English   中英

ASP.net MVC路由参数

[英]ASP.net MVC routing parameters

我有这样的路线:

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 }
            );

然后在我的控制器中执行以下操作:

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

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

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

这是不可能的,因为请求中不包含哈希。 它们保留供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片段部分的开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM