【发布时间】:2020-12-08 11:39:38
【问题描述】:
经过大量研究,我发布了这个问题,因为我自己无法弄清楚。
场景是我需要将以下参数传递给Web API 2 controller in .Net framework 4.8 中的HttpPost 请求:
- 日期 -> 日期对象
- 作者 -> 字符串
- 标题 -> 字符串
- 内容 -> 字符串
- 图像 -> 文件对象
我的前端 Angular 代码是:
saveNewsArticle(data) {
return new Observable(observer => {
let apiStr = this.apiStrBase + "SaveNewsArticle";
let formData = new FormData();
formData.append('date', data.publishDate);
formData.append('author', data.author);
formData.append('title', data.title);
formData.append('image', data.image);
formData.append('content', data.content);
this.httpClient.post(apiStr, formData).subscribe((result) => {
observer.next({ result: true, data: result });
},
error => {
observer.next({ result: false });
}
);
});
}
我的 C# 代码是:
[HttpPost]
public void SaveNewsArticle()
{
var date = HttpContext.Current.Request.Params["date"];
var author = HttpContext.Current.Request.Params["author"];
var title = HttpContext.Current.Request.Params["title"];
var content = HttpContext.Current.Request.Params["content"];
var image = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;
}
所有这些都可以正常工作,但是,我使用 WYSIWYG 编辑器来获取文本的样式,因此 这是我的内容content 是 html,例如
System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client
以下是我迄今为止尝试过的:
-
我不想使用
<httpRuntime requestValidationMode="2.0" /> -
我可以将它作为模型传递
public void SaveArticle(Article article)一切都很好,但图像始终是null。 -
我可以替换 ' 和 '>' 并解决问题 对我来说,但这不是应该这样做的。这是一个黑客。
-
在 MVC 中,我们可以只使用
[ValidateInput(false)]或[AllowHtml]但不能在Web API 2上使用。 -
我是否应该实现一个自定义格式化程序来处理
multipart/form-data就像完成 here 一样
非常感谢任何帮助/指导。
【问题讨论】:
-
可以分享
Article类的代码吗?如果您使用article作为 Post Body in Action 方法,您将如何尝试访问image? -
和我开始在场景中描述的参数一样
-
@ChetanRanpariya 您建议的答案使用
IFormFile,它是.NetCore的一部分,而我正在使用.Net framework。请不要投票关闭此答案。如果这么简单,我一开始就不会发布这个问题。 -
@CodeWarrior 这是您收到的唯一异常消息吗?关于危险表单数据的一行?还是在告诉您没有合适的
MediaTypeFormatter可用?你可以只上传图片吗?如果不是,则关于multipart/form-data类型请求存在配置或格式化程序问题。
标签: c# file-upload asp.net-web-api2 multipartform-data form-data