gpt4 book ai didi

ASP.NET 4 WebAPI : route with back slash

转载 作者:行者123 更新时间:2023-12-04 15:08:00 25 4
gpt4 key购买 nike

我有一个 WebApi 路由 api/{type}({id})/{prop}我想用像 /api/User(domain\username)/groups 这样的 url 来调用它- 关键点是id中的“\”值(value)。我从客户端 url 编码发送它,即:api/User(domain%5Cusername)/groups .但是路线被忽略了,我得到了 404。

如何将斜杠传递给路由的参数?

最佳答案

正如@ATerry 在评论中建议的那样,问题不在于 ASP.NET,而在于 HTTP.SYS + IIS。甚至在进入 IIS 之前,反斜杠已被 HTTP.SYS 替换为正斜杠。
我们可以在 UrlRewrite IIS 模块的帮助下解决这个问题,因为它可以访问原始(未解码)url。

对于我的示例,我提出了以下规则。

<rule name="allow backslash" stopProcessing="true">
<match url="api/(.*)\((.*)\)(.*)" />
<action type="Rewrite" url="api/{R:1}({C:1}{C:2}{C:3}){R:3}" logRewrittenUrl="true" />
<conditions>
<add input="{UNENCODED_URL}" pattern="\((.*)(%5C)(.*)\)" />
</conditions>
</rule>

这并不理想,因为它非常具体。有一个只处理 %5C 的通用规则会更有用。 .

这个想法是用 %5C 捕获一个 url并重写它以将其放回原处。这有点奇怪,但它有效。

除了规则我们需要设置 allowDoubleEscaping=falsesystem.webServer/ security/ requestFiltering :
    <security>
<requestFiltering allowDoubleEscaping="true">
</requestFiltering>
</security>

使用此规则,进入 Mvc/Api Controller 的值将被编码(使用 %)。所以我们必须对其进行解码:
public virtual DomainResult GetObjectProp(string type, string id, string prop)
{
id = Uri.UnescapeDataString(id);
}

关于ASP.NET 4 WebAPI : route with back slash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42935514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com