url中的特殊字符给出“错误请求”或“路径中的非法字符”

时间:2010-09-06 20:15:45

标签: javascript asp.net-mvc url-routing escaping uri

我正在使用javascript来实时请求服务器生成的图像。

参数在url中传递并由MVC抓取,并在“id”参数中设置到控制器。像这样:

Public Function Index(ByVal id As String) As ActionResult

如果我不使用任何特殊字符,例如“?”,这样可以正常工作或引用。要发送那些我必须逃脱或编码这些内容的人,但我应该怎么做?

我尝试了javascript escapeencodeURIComponent,但它或者给了我“错误请求”或“路径中的非法字符”

示例网址为http://localhost/Imagem/Index/Question%3F,“问题?”

返回“错误请求”

3 个答案:

答案 0 :(得分:5)

您可能会发现this blog post有用。您将看到有解决方法,但使用风险自负。如果您使用的是.NET 4.0,请将其添加到您的web.config中:

<system.web>
    <httpRuntime 
        requestValidationMode="2.0"
        requestPathInvalidCharacters="&lt;,&gt;,*,%,:,&amp;,\"
        relaxedUrlToFileSystemMapping="true"
    />
    ...
</system.web>

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>
    ...
</system.webServer>

我个人建议你不要在这样的网址中使用特殊字符。您可以使用映射函数将它们转换为其他字符,或者仅在查询字符串参数中使用它们:http://localhost/Imagem/Index?id=Question%3F

答案 1 :(得分:0)

您正尝试在运行时访问由服务器创建的映像文件。

在上面的问题中,您尝试访问图像文件作为问题?

图像文件或任何文件都不会包含名称中的任何特殊字符,所以我认为这是非常明显的错误 - - 路径中的非法字符。

答案 2 :(得分:0)

感谢您的回复,但我使用escape进行了处理,然后将%字符转换为我稍后在服务器代码中将其更改回%和unescape本身。

在客户端脚本中:

myImg.src = "../../Imagem/Index/" + escape(myValue).replace(/\%/g, "_-_");

在控制器中:

Public Function Index(ByVal id As String) As ActionResult
    id = id.Replace("_-_", "%")
    id = HttpUtility.UrlDecode(id, System.Text.Encoding.Default())
    Return New ImageResult(CreateImage(id))
End Function