我正在使用javascript来实时请求服务器生成的图像。
参数在url中传递并由MVC抓取,并在“id”参数中设置到控制器。像这样:
Public Function Index(ByVal id As String) As ActionResult
如果我不使用任何特殊字符,例如“?”,这样可以正常工作或引用。要发送那些我必须逃脱或编码这些内容的人,但我应该怎么做?
我尝试了javascript escape
或encodeURIComponent
,但它或者给了我“错误请求”或“路径中的非法字符”
示例网址为http://localhost/Imagem/Index/Question%3F
,“问题?”
返回“错误请求”
答案 0 :(得分:5)
您可能会发现this blog post有用。您将看到有解决方法,但使用风险自负。如果您使用的是.NET 4.0,请将其添加到您的web.config中:
<system.web>
<httpRuntime
requestValidationMode="2.0"
requestPathInvalidCharacters="<,>,*,%,:,&,\"
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