1

Json データを Ajax によって Controller に渡したい (前にAntiForgery と JSON の互換性がないことを参照しました)。これが私のコードです。

アヤックス:

var self = this;
self.Url = ko.observable();
self.Description = ko.observable();
self.ValueName = ko.observable();
self.MatchRegex = ko.observable();
self.__RequestVerificationToken = ko.observable('@Html.AntiForgeryTokenValueOrchard()');

self.Xpaths = ko.observableArray([
    { Name: 'RootXPath', Xpath: '', Regex: '', isRootXPath: true }
]);

self.addRow = function () {
    self.Xpaths.push({ Name: '', Xpath: '', Regex: '', isRootXPath: false });
};

self.removeRow = function () {
    if (this.name == 'RootXPath')
        return;
    self.Xpaths.remove(this);
};
self.executeExtractScript = function () {
var myValues = JSON.stringify(ko.toJS(self));
$.ajax({
    url: '@Url.Action("EExtractScriptTemp", "Home", new { area = "Crawler" })',
    type: 'POST',
    data: myValues,
    contentType: 'application/json; charset=utf-8',
    success: function () {
        $(".result").html("Success");
        runEffect();
    },
    error: function () {
        $(".result").html("Error");
        runEffect();
    }
});

};

私のコントローラー

[HttpPost]
public ActionResult EExtractScriptTemp(ExtractScriptTempModels objectJSon) {
   return null;
}

myValuesの実際の値は (Chrome で要素を調べることにより) です。

"{"__RequestVerificationToken":"6ygUGMe1PER7FizLBqCDJLcSfp9zuA4dcRyUHCwVwkWzOTO0AiRF8QRSDwoqRI-SD9FfiFvF-jozFKL10HS21xTBlRP4EndYbmGhPSX_Kuk1F0r0swYnGZZxZdy793eQxfmkvjIUtnwdLtrg0q8zhFdZNJBvmiPA6dC57prmw1c1","Xpaths":[{"Name":"RootXPath","Xpath":"","Regex":"","isRootXPath":true}]}"

しかし、それでもエラーが発生しました

{"必要な偽造防止フォーム フィールド \"__RequestVerificationToken\" が存在しません。"}

@Matthew の方法と @Giscard Biamby の方法の両方を使用しようとしましたが、機能しなくなりました。

私の問題は何ですか?どうもありがとう !

4

2 に答える 2