我正在使用asp.net mvc 4(vb)而且我在最后一部分时已经完成了我的搜索功能。 ValidateInput(False)参数适用于每一次调用,除非我通过javascript使用调用。 我得到的错误如下:从客户端(<)检测到潜在危险的Request.Path值。 当我试图搜索类似html的东西时,我得到了这个。
我将列出我正在使用的代码:
MVC观点:
<input type="text" id="searchtextMVC" name="query" onkeydown="EnterKeyDownForWhoIsWho(event);" data-url="@Url.Content("~/Controller/")"/>
的javascript:
window.location.href = $('#searchtextMVC').attr('data-url') + 'Index/' + document.getElementById('searchtextMVC').value;
这两个修复它,所以我得到了带参数的正确网址。
我的行动就是这样开始的:
<ValidateInput(False)> _
Public Function Index() As ActionResult
Code stuff, eventually using CStr(RouteData.Values("fullName"))
现在的问题是ValidateInput适用于每次通过javascript调用EXCEPT。 我还在我的web.config中添加了requestValidationMode =“2.0”,但这没有帮助。我需要为我的函数提供参数fullName才能工作。
我花了太多时间在网上搜索没有答案,所以我希望我们可以一起解决这个问题。
编辑:我忘了提到我也在我的web.config中尝试了requestPathInvalidCharacters =“”,这使得我总是遇到非法的字符错误。EDIT2:
我在javascript中尝试了url-encoding,但它没有帮助。这是我试过的:
searchValue = $('#searchtextMVC').attr('data-url') + 'Index/' + encodeURIComponent(document.getElementById('searchtextMVC').value);
答案 0 :(得分:-1)
<强>问题:强>
将ValidateInput设置为false将允许Request.Form中的“潜在危险请求”。
但是,您构建网址的方式是获取输入的值并将其添加为网址的一部分。将ValidateInput设置为false不会阻止“检测到潜在危险的Request.Path值”。
可能的解决方案:
您可能需要考虑对输入的值进行URL编码并将其传递给查询字符串。