Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript url中的特殊字符表示“url”;“错误请求”;或;“路径中的非法字符”;_Javascript_Asp.net Mvc_Url Routing_Escaping_Uri - Fatal编程技术网

Javascript url中的特殊字符表示“url”;“错误请求”;或;“路径中的非法字符”;

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,但它要么给了我“错误的请求”要么“路径中的非法字符” 示

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

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

Public Function Index(ByVal id As String) As ActionResult
如果我不使用任何特殊字符,比如“?”或引号,这就可以了。要发送这些,我必须转义或编码这些内容,但我应该如何做呢

我尝试了javascript
escape
encodeURIComponent
,但它要么给了我“错误的请求”要么“路径中的非法字符”

示例url为
http://localhost/Imagem/Index/Question%3F
,用于“问题?”


这将返回“错误请求”

您试图访问服务器在运行时创建的映像文件

在上面的问题中,您是否试图以问题的形式访问图像文件


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

您试图访问服务器在运行时创建的图像文件

在上面的问题中,您是否试图以问题的形式访问图像文件

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

您可能会发现有用的字符。正如您将看到的,有一些变通方法,但使用风险自负。如果您使用的是.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>

...
...
就我个人而言,我建议您避免在这样的url中使用特殊字符。您可以使用映射函数将它们转换为其他字符,也可以仅在查询字符串参数中使用它们:
http://localhost/Imagem/Index?id=Question%3F

您可能会发现这很有用。正如您将看到的,有一些变通方法,但使用风险自负。如果您使用的是.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>

...
...

就我个人而言,我建议您避免在这样的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就不会抱怨了。谢谢