概述:
RemoteOnly
问题是当我在网址中输入“%7C”时,我会收到:
Illegal characters in path.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Illegal characters in path.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: Illegal characters in path.]
System.IO.Path.GetExtension(String path) +14365864
Umbraco.Core.UriExtensions.IsClientSideRequest(Uri url) +23
Umbraco.Web.UmbracoModule.BeginRequest(HttpContextBase httpContext) +365
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
%7C是管道“|”。 %7C是唯一一个(我尝试过)给我YSOD的人。
如果我放了任何东西(我已经尝试了30多种组合),例如%7A,%2A,那么有时它会给我这个错误,不会转到404页面,但从来没有YSOD:
Bad Request - Invalid URL
HTTP Error 400. The request URL is invalid.
的web.config
<customErrors mode="RemoteOnly" defaultRedirect="~/error-page" />
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="503" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" />
<error statusCode="500" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" />
<error statusCode="503" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" />
</httpErrors>
在Umbraco中,有一个配置文件(umbracoSettings.config),它有一个XML部分,可以替换字符。
示例:
<char org="~"></char>
<char org=" ">-</char>
<char org="""></char>
<char org="'"></char>
<char org="%"></char>
<char org="."></char>
<char org="|"></char>
你可以看到管道就在那里。如果我输入网址,
local.website.com/asdf|
(注意管道),它被编码到local.website.com/asdf%7C
。
我尝试添加<char org="%7C"></char>
但它不起作用。我错过了什么吗?这是一个已知的错误吗?
答案 0 :(得分:0)
这实际上不是bug或与Umbraco相关的问题,而是ASP.NET验证HTTP请求中的URL是否需要是有效的Windows文件路径。
您可以使用
来解决它[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
RelaxedUrlToFileSystemMapping属性确定URL的方式 传入的HTTP请求将被验证。如果此属性为false, 通过使用确定是否相同的规则来验证URL Windows文件系统路径有效。
答案 1 :(得分:0)
必须添加到web.config
<remove statusCode="400" subStatusCode="-1" />
<error statusCode="400" prefixLanguageFilePath="" path="~/error-page" responseMode="ExecuteURL" />
此外,当我在customErrors="On"
上发现错误时,此错误消失了。
如果有人有更好的选择或推理背后,我愿意接受建议