【问题标题】:How do you handle routing in ASP.Net WebApi routing with a '/' in your string parameter如何在 ASP.Net Web Api 路由中使用字符串参数中的“/”处理路由
【发布时间】:2015-05-07 04:07:00
【问题描述】:

我有一个 C# WebApi 4 项目,我试图在其中包含一个带有字符“/”的字符串参数。比如我在参数中传递了一个路径:

http://localhost/api/MyController/mypath/testing

我希望 MyController 的 Get 方法中的 id 参数填充“mypath/testing”。但是,看起来路由的东西这应该是两个参数并且找不到去哪里所以它返回错误。

我想我需要更改默认路由。目前在 WebApiConfig 类中设置为:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = RouteParameter.Optional }
);

但我不确定要使用哪种类型的模式。有人有什么建议吗?

编辑:如果我将 URL 更改为 http://localhost/api/MyController?id=mypath/testing 并将路由修改为:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}?{id}",
     defaults: new { id = RouteParameter.Optional }
);

然后参数确实去了。但是,我要求不要更改 URL 模式,也不要更改 URL 编码。

【问题讨论】:

  • 在传入之前对其进行编码?不要使用 / 作为分隔符,因为它已经在 URL 中使用了? RFC 告诉您 URL ietf.org/rfc/rfc3986.txt 中的有效内容。哦,如果您遇到这个问题(例如,如果您登录某人并使用 returnUrl 返回示例中的当前链接),双编码 URL 在 .NET 中很有趣:stackoverflow.com/questions/7251285/…
  • 我能想到的唯一方法是ControllerName/{*id}。但它有其局限性。
  • @Mathew,效果很好!如果您添加答案,我会将其标记为正确。另外,我很好奇 - 你提到的一些限制是什么?

标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-routing


【解决方案1】:

'/' 保留在 url 中,如果你想将它用作参数,你应该对其进行编码。你需要这样编码:%2F.

您可以在link中查看所有需要编码的符号

【讨论】:

  • localhost/api/MyController/mypath/testing 是没有编码的有效路径 - 例如,如果我有一个带有文件夹而不是使用 MVC 的不同服务器。这实际上更多是 MVC 的解析问题,它解析 '/' 并期望它们始终是路由值而不是字符串值。
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2016-05-29
  • 2020-04-26
相关资源
最近更新 更多