将URL作为字符串传递 - “&”之后的所有内容迷路了

时间:2016-04-05 14:49:50

标签: javascript c# asp.net-mvc url asp.net-web-api

我有一个MVC应用程序,它在onclick事件中进行API调用

<a href="javascript://" onclick="@Model.MyApiCall"></a>

@ Model.MyApiCall是一个看起来像这样的字符串:

window.location = 'http://localhost/myPath?myImagePath=http://myimagepath&width=360&category=2'

这成功调用了我的API。到现在为止还挺好。 然而,出于某种原因,一切都在&amp;正在从myImagePath中切断。因此,不是myImagePath等于从我的点击发送的内容,我只是得到了这个:

http://myimagepath

3 个答案:

答案 0 :(得分:2)

您必须对查询字符串参数进行编码。您可以在javascript中执行此操作:

window.location = 'http://localhost/myPath?myImagePath=' + encodeURIComponent('http://myimagepath') + '&width=360&category=2'

使用encodeURIComponent

您也可以仅在HttpUtility.UrlEncode的{​​{1}}部分使用http://myimagepath在MVC控制器中执行此操作。

[编辑]

如果您的Model.MyApiCall参数是整个myImagePath字符串,那么当然Steve Danner是对的,您应该按照他的回答。

答案 1 :(得分:0)

&符号(&amp;)是一个特殊字符,需要进行编码才能被浏览器正确解析。您需要将查询字符串和实际路径分解为单独的字符串。像这样:

<a href="javascript://" onclick="@(Model.MyApiCallPath +
 HttpUtility.UrlEncode(Model.MyApiCallQueryString))"></a>

你的最终js看起来像是:

window.location = 'http://localhost/myPath?myImagePath=http%3A%2F%2Fmyimagepath%26width%3D360%26category%3D2';

答案 2 :(得分:0)

您正在尝试将网址作为网址参数传递。由于有问题的url包含特殊字符,因此您需要转义/编码uri组件。

由于你正在使用ASP.Net,你应该用以下内容包装:

window.location = Uri.EscapeUriString('http://localhost/myPathmyImagePath=http://myimagepath&width=360&category=2')