使用window.location.href调用mvc并给出操作危险请求时,ValidateInput(False)不起作用

时间:2013-02-08 14:34:55

标签: jquery asp.net-mvc

我正在使用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);

1 个答案:

答案 0 :(得分:-1)

<强>问题:

将ValidateInput设置为false将允许Request.Form中的“潜在危险请求”。

但是,您构建网址的方式是获取输入的值并将其添加为网址的一部分。将ValidateInput设置为false不会阻止“检测到潜在危险的Request.Path值”。

可能的解决方案:

您可能需要考虑对输入的值进行URL编码并将其传递给查询字符串。