Asp.Net MVC:允许 URL 中的 `DEL` 字符
Asp.Net MVC: Allow the `DEL` character in URL
我有 Asp.Net MVC 应用程序 (.NET Framework 4.8) 和 Web API 控制器,我需要允许 DEL
字符(ASCII 字符 127
,HX是 %7F
) 在该控制器的操作参数中。 (一般来说,我需要允许几乎所有从 32 到 127 的 ASCII 字符,但 /
和 \
)。
我的控制器
public class ManagementController : ApiController
...
[HttpPost]
[Route("management/{paramater?}")]
public async Task<IHttpActionResult> Post(string paramater = null)
{
}
在 web.config
中更改了无效字符列表,因为 <
、>
、&
和其他字符可以出现在 [= 的值中25=]
<system.web>
<httpRuntime targetFramework="4.8" requestPathInvalidCharacters="\" />
</system.web>
还允许双重转义以启用加号 +
(是的,这被认为是危险的设置)并添加了 ManagementUrlHandler-Integrated-4.0
处理程序以允许 URL.
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*."
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ManagementUrlHandler-Integrated-4.0"
path="/management/*"
verb="POST"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
目前,当 parameter
包含百分比编码的保留字符(例如 !、*、:、+ 等以及 .
等其他字符时),路由可以正常工作并且控制器的操作符合预期parameter
值(例如,向 URL http://localhost/management/012345%2A
发出请求,并且 parameter
值在控制器的操作中为 012345*
。
然而,当 parameter
包含 DEL
百分号编码形式的字符 %7F
(例如,向 URL http://localhost/management/012345%7F
发出请求)时,IIS returnsBad Request
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
<h2>Bad Request - Invalid URL</h2>
<hr>
<p>HTTP Error 400. The request URL is invalid.</p>
</BODY>
</HTML>
请问如何在 Asp.Net MVC 应用程序的 URL 中允许 DEL
字符?
更新
RFC https://www.rfc-editor.org/rfc/rfc3986 没有指定 DEL
字符为保留字符或非保留字符。但是 DEL
字符可以是 Asp.Net 核心应用程序中 URL 的一部分。不幸的是,由于技术限制
,此项目无法移至 Asp.Net Core
这是一个 %7F 不起作用的例子:(试一试!)
https://whosebug.com/%7F
这里是 %7F 起作用的例子:(试一试!)
https://whosebug.com/?parameter=%7F
因此将您的代码更改为:
public class ManagementController : ApiController
...
[HttpPost]
public async Task<IHttpActionResult> Management(string parameter = null)
{
}
我有 Asp.Net MVC 应用程序 (.NET Framework 4.8) 和 Web API 控制器,我需要允许 DEL
字符(ASCII 字符 127
,HX是 %7F
) 在该控制器的操作参数中。 (一般来说,我需要允许几乎所有从 32 到 127 的 ASCII 字符,但 /
和 \
)。
我的控制器
public class ManagementController : ApiController
...
[HttpPost]
[Route("management/{paramater?}")]
public async Task<IHttpActionResult> Post(string paramater = null)
{
}
在 web.config
中更改了无效字符列表,因为 <
、>
、&
和其他字符可以出现在 [= 的值中25=]
<system.web>
<httpRuntime targetFramework="4.8" requestPathInvalidCharacters="\" />
</system.web>
还允许双重转义以启用加号 +
(是的,这被认为是危险的设置)并添加了 ManagementUrlHandler-Integrated-4.0
处理程序以允许 URL.
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*."
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ManagementUrlHandler-Integrated-4.0"
path="/management/*"
verb="POST"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
目前,当 parameter
包含百分比编码的保留字符(例如 !、*、:、+ 等以及 .
等其他字符时),路由可以正常工作并且控制器的操作符合预期parameter
值(例如,向 URL http://localhost/management/012345%2A
发出请求,并且 parameter
值在控制器的操作中为 012345*
。
然而,当 parameter
包含 DEL
百分号编码形式的字符 %7F
(例如,向 URL http://localhost/management/012345%7F
发出请求)时,IIS returnsBad Request
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
<h2>Bad Request - Invalid URL</h2>
<hr>
<p>HTTP Error 400. The request URL is invalid.</p>
</BODY>
</HTML>
请问如何在 Asp.Net MVC 应用程序的 URL 中允许 DEL
字符?
更新
RFC https://www.rfc-editor.org/rfc/rfc3986 没有指定 DEL
字符为保留字符或非保留字符。但是 DEL
字符可以是 Asp.Net 核心应用程序中 URL 的一部分。不幸的是,由于技术限制
这是一个 %7F 不起作用的例子:(试一试!)
https://whosebug.com/%7F
这里是 %7F 起作用的例子:(试一试!)
https://whosebug.com/?parameter=%7F
因此将您的代码更改为:
public class ManagementController : ApiController
...
[HttpPost]
public async Task<IHttpActionResult> Management(string parameter = null)
{
}