asp.net mvc - 路由中的 C# WebAPI 核心反斜杠
本文关键字:核心 WebAPI mvc net 路由 asp | 更新日期: 2023-09-27 17:55:38
我们有一个Webapi,它应该能够根据传递的用户获取数据。 此用户包含一个域,因此参数类似于 Domain'Username
.
最后,我们的 API 调用应如下所示:http://servername/api/controller/Domain'Username
或编码http://servername/api/controller/Domain%5CUsername
两个 URL 都返回"未找到",并且控制器未触发(断点未命中)
我发现了这个,它说你不能直接将%值传递给URL。 在 MVC URL asp.net 中传入 Active Directory 用户名 (DOMAIN''etc),并在 ASP .NET MVC 中传递此如何 URL 编码参数。但是,当我传递 %5C 以外的内容时(例如,%20 表示空格或 %25 表示 % 或 %92 表示撇号),它正在工作(断点命中并更正结果)。
我知道我可以使用 ?parameter=EncodedUsername
,这是有效的,但用户名只是一种可能性,所以如果没有必要,我不想使用这种方式,因为我在每种情况下都没有反斜杠。
我的路线如下所示: [HttpGet("{firstParameter}/{usernameWithDomainAndBackslash}")]
尝试使用 DoubleEscaping 进行反斜杠。
-
修改您的 web.config:
<configuration> <!-- Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380 --> <system.web> <httpRuntime requestPathInvalidCharacters=""/> </system.web> <system.webServer> <security> <requestFiltering allowDoubleEscaping="true"></requestFiltering> </security> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> </handlers> <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".'logs'stdout" forwardWindowsAuthToken="false"/> </system.webServer> </configuration>
-
对于/,它将编码为"%252F"(%2F -> %252F)
-
将请求发送到服务器端,在那里对其进行解码。