0

私は.NET4.0MVCプロジェクトに取り組んでいます。KOモデルのデータをAjaxに投稿しようとしています。そのデータは、次のXML形式の文字列です。

<SearchCriteria><Criteria SearchOn="Name" SearchValue="test 3" /></SearchCriteria>

このように投稿しようとしています。

$.ajax({
        url: destUrl,
        data: ko.toJSON(DataToPost()),
        type: "POST",
        success: function (result) {
            // I am doing my stuff here.
            }
        },
        error: function (request, textStatus, errorThrown) {
            alert(request.statusText);
        }
    });

ここでは、送信されているデータがです"ko.toJSON(DataToPost())"。データメンバーに含まれている文字列をDataToPost()返します。のデータを変換するために使用されます。XMLKO modelDataToPostko.toJSON()KO modelJSON

これにより、実行時例外がスローされます。これは通常、またはタグthrownを含むものを投稿するときに発生します。これはによるセキュリティ機能です。以下は例外です。javascripthtml.NET

A potentially dangerous Request.Form value was detected from the client.

&lt;SearchCriteria&gt;&lt;Criteria SearchOn=&quot;...est 3\&quot; /&gt;&lt;/SearchCriteria&gt;

私は時々同じような状況に直面しました(私はKOその時間を使用しておらず、それは通常の投稿、つまり非でしたがAjax)。当時は使って問題を克服しましたjavascript escape()が、今回はそれfailedです。私はそれを次のように使用しました

$.ajax({
    url: destUrl,
    **data: ko.toJSON(escape(SearchCriteria()))**,
    type: "POST",
    success: function (result) {
        // I am doing my stuff here.
        }
    },
    error: function (request, textStatus, errorThrown) {
        alert(request.statusText);
    }
});

その他の一般的な修正は、ページレベルまたはアプリケーションレベルでこのセキュリティを無効にすることです。それは次のように行うことができます。

ページレベル。

<%@ Page validateRequest="false" %> 

アプリケーションレベル。

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

しかし、このセキュリティを廃止することは良くありません。賢明な動きではないと思います。今、私は何をすべきかわかりません。提案が必要です。

前もって感謝します!

4

3 に答える 3

0

フォーマットされた文字列にするのは難しいことに気づいたのでserializeXMLフォーマットされた文字列XMLの代わりにリストを投稿することにしましKey value pairた。このアプローチはうまく機能しています。

于 2012-05-24T09:55:33.660 に答える
0

これは実際にはノックアウトの質問ではありません。それは本当にxmlデータをasp.netに投稿することです。リクエストの検証は、beginRequestの前に.NET4.0で開始されます。web.configをこれに変更します。

<httpRuntime requestValidationMode="2.0"/>

ValidateInput次に、特定のアクションメソッドに属性を追加します。

[ValidateInput(false)]

これにより、サイト全体のリクエスト検証を損なうことなくデータを通過させることができます。

お役に立てれば。

于 2012-05-22T00:09:50.160 に答える
0

そのxmlを文字列として渡し、クライアント側でシリアル化するのではなく、サーバー側でデコードしてください。ボタンの送信で何か間違ったことをしている可能性があると確信しているので、HTMLも投稿できますか。

于 2012-05-24T10:16:13.970 に答える