我们有一个Webapi应该能够根据传递的用户获取数据。此用户包含域名,因此参数类似于Domain\Username
。
最后,我们的API调用应如下所示:
http://servername/api/controller/ Domain\Username
或编码
http://servername/api/controller/ Domain%5CUsername
两个URL都返回Not Found并且未触发控制器(断点未命中)
我找到了这个,它说你不能直接将%-Values传递给URL。 Pass in Active Directory user name (DOMAIN\etc) in asp.net MVC URL和此How to URL encode parameters in ASP .NET MVC。 但是,当我传递除%5C以外的其他内容(例如%20为空格或%25为%或%92为撇号)时,它正在工作(断点命中和正确结果)。
我知道我可以使用?parameter=EncodedUsername
,这是有效的,但用户名只有一种可能性,所以如果没有必要,我不想使用这种方式,因为我不会在每种情况下都使用反斜杠。
我的路线看起来像这样:
[HttpGet("{firstParameter}/{usernameWithDomainAndBackslash}")]
答案 0 :(得分:0)
尝试使用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)
将请求发送到服务器端,将其解码。