私は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;
これら2つはそれを修正するので、パラメーターを使用して正しいURLを取得します。
私の行動は次のように始まります:
<ValidateInput(False)> _
Public Function Index() As ActionResult
Code stuff, eventually using CStr(RouteData.Values("fullName"))
ここでの問題は、ValidateInput がすべての呼び出しで機能することです。ただし、javascript を介した呼び出しは除きます。requestValidationMode="2.0" も web.config に追加しましたが、役に立ちませんでした。関数が機能するには、パラメーター fullName を指定する必要があります。
インターネットで検索しても答えがないので、一緒に解決できることを願っています。
編集: web.config で requestPathInvalidCharacters="" も試したことを忘れていましたが、これにより、常に不正な文字エラーが発生するようになりました。
EDIT2:
JavaScript で URL エンコードを試みましたが、役に立ちませんでした。これが私が試したことです:
searchValue = $('#searchtextMVC').attr('data-url') + 'Index/' + encodeURIComponent(document.getElementById('searchtextMVC').value);