0

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

这两个修复了它,所以我得到了带参数的正确 url。

我的动作是这样开始的:

<ValidateInput(False)> _
        Public Function Index() As ActionResult
             Code stuff, eventually using CStr(RouteData.Values("fullName"))

现在的问题是 ValidateInput 对每个调用都有效,除了通过 javascript 调用的调用。我还在 web.config 中添加了 requestValidationMode="2.0",但这并没有帮助。我需要为我的函数提供参数 fullName 才能工作。

我花了太多时间在互联网上搜索没有答案,所以我希望我们可以一起解决这个问题。

编辑:我忘了提到我还在 web.config 中尝试了 requestPathInvalidCharacters="" ,这使得我总是遇到非法字符错误。

编辑2:

我在 javascript 中尝试了 url-encoding,但没有帮助。这是我尝试过的:

searchValue = $('#searchtextMVC').attr('data-url') + 'Index/' + encodeURIComponent(document.getElementById('searchtextMVC').value);
4

1 回答 1

-1

问题:

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

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

可能的解决方案:

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

于 2013-02-08T18:39:14.037 回答