提问人:David T. Macknet 提问时间:10/25/2023 最后编辑:David T. Macknet 更新时间:11/11/2023 访问量:172
服务器返回内部服务器错误/危险 Request.Form 值
Server returns Internal Server Error / Dangerous Request.Form value
问:
MVC项目,已经存在了很长一段时间,庞大的单体。我希望我在这里遗漏了一些东西。
我有一个通过ajax提交的表单。它到达服务器,被存储起来,然后我去向客户端返回一个对象(基本上是状态和目标URL)。
如果表单输入中有任何包含非法字符(html-ish)的内容,那么它就会给我带来关于可怕数据的错误。
- 我试过把视图模型的每个文本字段都放在上面(不会是长期的)。
[AllowHtml]
- 我已经添加了控制器方法
[ValidateInput(false)]
- 删除了所有警报(因为它正在保存数据)。
愚蠢的是它保存了数据。“危险”数据进入服务器和数据库,然后返回到控制器方法。我似乎无法捕捉到这一点, - 我已经将它调试到我从控制器发货的地方,然后在浏览器中出现错误。
var form = $(this).parents('form:first').serializeObject();
$.ajax({
type: "POST",
url: '@Url.Action("EditAjax", "Item", new {area = "ProjectSupport"})',
dataType: "json",
data: form,
ignoreErrors: true,
success: function(result) {
var formData = new FormData($('#editItem')[0]);
if (result.Errors) {
//alert(result.Errors);
$('form').find('a.submit,#saveFormButton1,#saveFormButton2').removeClass('btn-inverse').addClass('btn-primary');
submitted = false;
} else {
formData.append("supportObjectTypeName", result.SupportObjectTypeName);
formData.append("supportObjectLocalizedID", result.SupportObjectLocalizedID);
url = result.Url;
$.ajax({
type: "POST",
url: '@Url.Action("UploadAttachments", "Item", new {area = "ProjectSupport"})',
dataType: "json",
mimeType: "multipart/form-data",
contentType: false,
cache: false,
processData: false,
data: formData,
ignoreErrors: true,
success: function() {
window.location.href = url;
},
error: function (xhr, ajaxOptions, thrownError) {
//alert(thrownError);
//$('form').find('a.submit,#saveFormButton1,#saveFormButton2').removeClass('btn-inverse').addClass('btn-primary');
//submitted = false;
window.location.href = url;
}
});
}
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError);
alert(xhr.responseText);
var fullErrorText = [];
$.each(xhr.responseJSON, function() {
fullErrorText.push(this.errors.join());
});
alert(fullErrorText.join());
$('form').find('a.submit,#saveFormButton1,#saveFormButton2').removeClass('btn-inverse').addClass('btn-primary');
submitted = false;
}
});
我以前使用过 AllowHtml,它工作得很好 - 把它拍到模型上,你就很好了。不过,我刚刚在这个问题上花了几个小时,我希望有人在这方面比我更聪明(我敢肯定)。
有什么想法吗?
顶级域名:
- 我试过把视图模型的每个文本字段都放进去。
[AllowHtml]
- 我添加了控制器方法(还构建了一个自定义过滤器,只是......抓住稻草)。
[ValidateInput(false)]
- 删除了所有警报(因为它正在保存数据)。
- 按照@queeny的建议尝试。
Request.Unvalidated
思潮:
- 命名空间已经更改了它们的默认值或其他东西,因为以前编译的东西一直在抱怨名称冲突。
- EF 遇到了一些问题,但命名问题可能是最严重的。
- 收到通常的“我在缓存中留下了一些东西,懒得修复它”消息,中断了构建。
- CDN 在 debug 和 prod 之间有一个不同的 URL,没有对此进行转换。
web.config
- 我没有办法进行包更新(好吧,我做到了,但这很残酷)。
- 编译器也发生了变化(版本 1.x 到 4.x)。
- 我玩过各种属性,但那里没有乐趣。
我认为很可能是处理让我度过难关的命名空间问题。如果我选择我当天的迷信。
答:
0赞
jQueeny
11/5/2023
#1
您可以尝试此答案中提到的方法。Request.Unvalidated
评论
0赞
David T. Macknet
11/8/2023
我会试一试。我最终创建了一个全新的 MVC 站点,复制了所有区域内容,重新创建了所有 EF 模型,现在正在解决 EF 模型中的所有错误。
0赞
jQueeny
11/8/2023
@DavidT.Macknet Pfft!这听起来像是很多工作。如果您解决了这个问题,请发布。
0赞
David T. Macknet
11/8/2023
我到17号!我目前在install-package上收到错误,似乎是关于编译器的。我的部分问题是更改路径 - 我没有正确嵌套它们,所以我所有的包路径都搞砸了。呵呵。还是没有解决。今天是寻找错误的一天。呸。
0赞
David T. Macknet
11/8/2023
克服了错误,这些错误主要与实体框架搞砸了有关。我认为这与嵌套有关,但也与 EF 保留多个版本的文件有关,因此添加一些文件会捣碎项目文件中的文件引用。将错误拉出到记事本++中并对其进行清理和重复数据删除,这样就更容易找到。不过,处理起来并不“容易”。我已经花了 2.5 天来修复这个,现在必须测试一个新功能(是的,我在 10 年前写了这个东西,所以我可以在 5 年的 95% 编码时间的产品中添加一个功能)
评论