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}")]

asp.net mvc - 路由中的 C# WebAPI 核心反斜杠

尝试使用 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. 将请求发送到服务器端,在那里对其进行解码。