我有一个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
答案 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')