Asp.Net MVC Core实现双重转义

Kur*_*ula 6 c# asp.net asp.net-mvc asp.net-core-mvc

我正在开发一个asp.net mvc核心应用程序,并尝试允许两次转义。

我的编辑URL的电话号码为超链接(例如:+123)。我知道如何使用普通的asp.net mvc应用程序。我曾经将web.config文件更改为

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

但是我现在在没有web.config的Asp.Net MVC Core应用程序上。我如何以及在哪里管理?

Cod*_*ler 6

ASP.NET Core 应用程序可以托管在各种 Web 服务器上(IIS、Kestrel、Nginx、Apache 等)。所有这些 Web 服务器对请求过滤(尤其是启用双重转义)一无所知,而请求过滤是本机 IIS 功能。这是一个托管问题,ASP.NET Core 应用程序不应直接处理它。如果像这样的 URLhttp://youserver.com/Home/Phone/+12345将到达 ASP.NET Core 管道,则加号将不会以任何特殊方式处理,并将作为字符到达字符串模型+

当您在 IIS 上托管应用程序时,web.config 仍在使用中,因此您可以<requestFiltering allowDoubleEscaping="true"/>像通常的 ASP.NET 应用程序一样进行配置。同样,您不应该害怕以非 ASP.NET Core 方式执行某些操作。您配置托管问题;这不是 ASP.NET Core 的领域。

如果您想将应用程序托管在另一个 Web 服务器上,您应该检查它如何处理特殊字符。我知道 Kestrel 只会按原样传递此类 URL,因此如果托管在 Kestrel 上,您无需执行任何特定操作。


Sim*_*ver 5

您应该使用web.config 转换- 否则下次部署时您将把它清除,您的客户会回来说“嘿,它又坏了!”

使用以下内容创建一个文件(实际项目中web.Release.config不需要文件):web.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>

      <security xdt:Transform="InsertIfMissing">
        <requestFiltering allowDoubleEscaping="true" />
      </security>

    </system.webServer>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

当您发布发布版本时,这将被添加 - 以及所有 aspNetCore 处理程序。包含该部分非常重要,InsertIfMissing否则它将被忽略。

您不需要像这样的第三方。7