路由中的C#WebAPI核心反斜杠

时间:2016-07-06 07:12:47

标签: c# asp.net-mvc asp.net-web-api url-encoding backslash

我们有一个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}")]

1 个答案:

答案 0 :(得分:0)

尝试使用DoubleEscaping反斜杠。

  1. 修改您的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>
    
  2. 对于/,它将被编码为'%252F'(%2F - >%252F)

  3. 将请求发送到服务器端,将其解码。