当前位置: 首页 > 编程语言 > C#

在URL中使用斜杠“-”路由参数Share

时间:2023-04-11 11:29:12 C#

在URL中使用斜杠“/”路由参数Route("orders/{*orderdate}")]通配符仅适用于URI中的最后一个参数。如果我想要以下URI,我该如何解决问题:[Route("orders/{orderdate}/customers")]更新:我知道通过重构代码解决问题的选项很少,所以请不要t提供如下解决方案:将路线模板更改为[Route("orders/customers/{orderdate}")]将日期更改为其他格式(例如“dd-mm-yyyy”)@bet..我认为genericUriParserOptions不再可用对于.net4.5或更高版本。也正如@JotaBe建议的那样,您可能需要正确解码url请求。在大多数情况下,%2F会自动转换为斜杠“/”,因此如果您需要转义它,则需要先解码“%”字符。因此您的URL:看起来像:www.domain.com/api/orders/23%252F06%252F2015/customers请注意,字符'%252F'将转换为实际的'%2F'编辑好的,这是完整的解决方案(尝试过并为我工作):假设你有一个像这样的API端点:[Route("orders/{date}/customers")]publicHttpResponseMessageGet(stringdate){}在web.config中,你需要将requestPathInvalidCharacters设置为空,告诉asp.net允许所有请求当客户端向API发送请求时,您需要确保像这样转义“%”:http://www.domain.com/api/orders/23%252F06%252F2015/customers然后,您需要解码请求[Route("orders/{date}/customers")]publicHttpResponseMessageGet(stringdate){DateTimeactualDate=DateTime.Parse(System.Net.WebUtility.UrlDecode(date));//dateis23/06/2015}正如@AlexeiLevenkov的评论所指出的,这是错误的:您不能在接受正斜杠的URL中使用参数,因为这是分隔每个URL片段的特殊符号。所以只要URL中包含这个符号,就会有新的片段,单个参数不能包含多个片段。如果您需要更多详细信息,请阅读这篇文章,但这些是最相关的摘录:因此,如果需要,查询字符串可以包含正斜杠,并且它们根本不定义路径段。这些是该问题的一些解决方案:注意:您最初的问题是“查询字符串”,我对编码的评论是指查询字符串,它是问号(如果存在)之后的URL的最后一部分,例如&id=27.我更正了你的问题,所以它没有提到“查询字符串”,这不是你需要的正确名称你可以使用以下URI[Route("orders/{DD:int}/{MM:int}/{YY:int}}/customers")]然后使用自定义模型活页夹获取DD/MM/YY并将它们转换为可以在操作方法中绑定的日期。您可以选择如何处理约束(更严格地使用正则表达式)或使用验证并在不匹配时返回400。一种更简单的方法是采用Day/Month/Year并将其放入代码中。这是处理模型绑定的链接。以上就是C#学习教程:在URL中使用斜杠“/”路由参数,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处: