json - 在 asp core web api 中混合 fileupload 和 raw json 是不可能的吗?
问题描述
几周以来,我一直在尝试让我的 API 接受文件上传,以及 json 中的其他原始数据。API 非常大,是为用户创建声明/请求而构建的。一方面是他们应该能够在需要时上传文件。我使用邮递员来测试 API。但是,正如我发现的那样,不可能混合发送原始 json 请求和表单数据来上传文件的方法。我已经尝试过模型绑定等来尝试解决这个问题,但我没有取得任何成功。我唯一的成功是当我在控制器中创建一个单独的文件上传方法时。但这并不是最佳选择,因为用户应该在上传其他信息/数据的同一请求中上传文件。
如果有人对如何解决这个问题有任何好主意,我将不胜感激。
我的控制器如下所示:
[HttpPost]
public async Task < IActionResult > AddRequest(Request model) {
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
try {
await _request.AddRequest(model);
} catch (Exception ex) {
return BadRequest(ex.Message);
}
return Ok();
}
控制器只处理 HttpPost 和请求。实际方法等位于 viewmodel 类中,如下所示:
public async Task < bool > AddRequest(Request model) {
bool CreateRequest = true;
int requestID = 0;
int claimID = 0;
//First Create the Request
foreach(Service item in model.Service) {
//First Create the Request
if (CreateRequest) {
var parameters = new DynamicParameters();
parameters.Add("WorkshopEmail", model.WorkshopEmail);
parameters.Add("WorkshopContactperson", model.WorkshopContactperson);
parameters.Add("WorkshopCellphone", model.WorkshopCellphone);
parameters.Add("IncVat", model.IncVat); /
parameters.Add("ExlVat", model.ExlVat);
try {
var requestIDenum = await _sqlconnection.QueryAsync<int>
($ @ "INSERT INTO [dbo].[Request]
([WorkshopEmail], [WorkshopContactperson], [WorkshopCellphone], [IncVat],
[ExlVat]) VALUES(@WorkshopEmail, @WorkshopContactperson, @WorkshopCellphone,
@IncVat, @ExlVat); SELECT SCOPE_IDENTITY();
",parameters);
requestID = requestIDenum.First(); CreateRequest = false;
}
catch (Exception ex) {
int hej = 0;
}
}
AddRequest 方法持续了很长一段时间,有不同的选项。这个想法是文件上传可能类似于:
if (item.fileuploadresults != null)
{
// add files to database here
}
在邮递员中发送请求时,json 看起来像:
{
"workshopEmail":"workshopemail",
"workshopContactperson":"workshopcontactperson",
"workshopCellphone":"workshopcellphone",
"incVat":"7",
"exlVat":"3",
"Service":[
// add service data
]
这是 api 的一部分,因为整体将是很多代码。但例如在“服务”中可以添加更多信息。
现在,是否不可能将文件上传添加到 api 并在邮递员中对其进行测试以将文件存储在数据库中?或者有没有一种方法可以在不在控制器中创建单独的方法的情况下继续对请求 api 进行计费?
解决方案
推荐阅读
- python - 根据 Pandas 中的时间序列创建月 x 年的数据框
- delphi - Delphi 表单命名约定
- c++ - RenderDoc 在调试 Vulkan 时不显示缓冲区内容
- reactjs - 在现代页面上使用带有 SPFx webpart 的 office-ui-fabric 面板时出现问题
- flutter - 如何使用 disqus 登录我的移动应用程序?
- java - 在 Ubuntu 上运行 JAR 时无法找到或加载主类
- c# - 内存扫描仪信息
- python - Python中的字典理解
- c++ - 如何停止 C++ 阻塞读取调用
- python - Python Kivy:如何检查按钮是否被点击?