Javascript url中的特殊字符表示“url”;“错误请求”;或;“路径中的非法字符”;
我正在使用javascript请求服务器实时生成的图像 该参数在url中传递,由MVC获取,并在“id”参数中设置给控制器。像这样:Javascript url中的特殊字符表示“url”;“错误请求”;或;“路径中的非法字符”;,javascript,asp.net-mvc,url-routing,escaping,uri,Javascript,Asp.net Mvc,Url Routing,Escaping,Uri,我正在使用javascript请求服务器实时生成的图像 该参数在url中传递,由MVC获取,并在“id”参数中设置给控制器。像这样: Public Function Index(ByVal id As String) As ActionResult 如果我不使用任何特殊字符,比如“?”或引号,这就可以了。要发送这些,我必须转义或编码这些内容,但我应该如何做呢 我尝试了javascriptescape或encodeURIComponent,但它要么给了我“错误的请求”要么“路径中的非法字符” 示
Public Function Index(ByVal id As String) As ActionResult
如果我不使用任何特殊字符,比如“?”或引号,这就可以了。要发送这些,我必须转义或编码这些内容,但我应该如何做呢
我尝试了javascriptescape
或encodeURIComponent
,但它要么给了我“错误的请求”要么“路径中的非法字符”
示例url为http://localhost/Imagem/Index/Question%3F
,用于“问题?”
这将返回“错误请求”您试图访问服务器在运行时创建的映像文件 在上面的问题中,您是否试图以问题的形式访问图像文件
图像文件或任何文件的名称中都不会包含任何特殊字符,因此我认为这是一个非常明显的错误--路径中包含非法字符。您试图访问服务器在运行时创建的图像文件 在上面的问题中,您是否试图以问题的形式访问图像文件 图像文件或任何文件的名称中都不会包含任何特殊字符,因此我认为这是一个非常明显的错误--路径中包含非法字符。您可能会发现有用的字符。正如您将看到的,有一些变通方法,但使用风险自负。如果您使用的是.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>
...
...
就我个人而言,我建议您避免在这样的url中使用特殊字符。您可以使用映射函数将它们转换为其他字符,也可以仅在查询字符串参数中使用它们:http://localhost/Imagem/Index?id=Question%3F
您可能会发现这很有用。正如您将看到的,有一些变通方法,但使用风险自负。如果您使用的是.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>
...
...
就我个人而言,我建议您避免在这样的url中使用特殊字符。您可以使用映射函数将它们转换为其他字符,也可以仅在查询字符串参数中使用它们:
http://localhost/Imagem/Index?id=Question%3F
感谢您的回复,但我通过使用转义
解决了这个问题,然后将%
字符转换为稍后将使用的字符我的服务器代码更改回%并取消自己的scape
在客户端脚本中:
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
感谢您的回复,但我通过使用
escape
解决了这个问题,然后将%
字符转换为稍后在服务器代码中更改为%的字符,并自行取消scape
在客户端脚本中:
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
它不是一个文件,它是一个包含“问题”的图像,写在上面,实时生成。它不是一个文件,它是一个包含“问题”的图像,写在上面,实时生成。我使用javascript escape,然后将“%”转换为其他内容,这样IIS/MVC就不会抱怨了。谢谢我使用javascript escape,然后将“%”转换为其他内容,这样IIS/MVC就不会抱怨了。谢谢