我有一个mvc3应用程序,它使用ajaxsubmit来控制器动作。
我页面中的<form>
开头标记如下所示:
<form action="/application/home/Save?Length=0" class="form-horizontal" data ajax="true" data-ajax-method="POST" data-ajax-mode="after" data-ajax update="#jsonResult" enctype="multipart/form-data" id="inputForm" method="post" role="form">
如果我从服务器所在的网络中提交此表单,则发布请求将始终有效。但如果我在外部提交表格,有时我会得到这个一般错误:
403 Forbidden: You don't have permission to access /application/home/Save on this server.
上述错误并不总是发生。仅在特定情况下。
在分析请求标头时,我看到的唯一区别是内容长度:
我认为可能的唯一其他差异是导致此问题的原因在于请求有效负载中的一个字段。
现在我传递给服务器的其中一个字段是一个特殊的代码,它有斜面和胡萝卜符号。这是一个例子:
------WebKitFormBoundaryvvviIpe8b82tAvOd
Content-Disposition: form-data; name="udfArray"
["1~d^testfield~d^R"]
每当表单提交失败时,它碰巧都有上面的表单数据。成功后,该字段将设置为[]
问题是,我不明白为什么将代码设置为["1~d^testfield~d^R"]
应该是一个问题,如果它在网络中工作。
如果有人能指出我在正确的方向上进行外部工作那将会很棒。
这是我的提交代码:
//options for submit action
var options = {
data: {
udfArray: ko.toJSON(self.TempArray()),
title: self.title(),
given_name: self.givenName(),
//... other fields
},
uploadProgress: function () {
},
dataType: "json",
success: function (result) {
//do something
}
};
$('#inputForm').ajaxForm();
$('#inputForm').unbind('submit').submit(function () {
$('#loadingDiv').show();
$(this).ajaxSubmit(options);
return false;
});