【发布时间】:2021-07-02 09:24:48
【问题描述】:
几周以来,我一直在尝试让我的 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 中添加文件上传并在 postman 中对其进行测试以将文件存储在数据库中?或者有没有一种方法可以在不在控制器中创建单独的方法的情况下继续对请求 api 进行计费?
【问题讨论】:
-
您可以在单个请求中创建文件和 json。查找多部分请求。
-
嗨@ajdi871,关于这个案例的任何更新?如果答案可以帮助解决问题,请接受 - 见What should I do when someone answers my question?
-
@FeiHan 不幸的是,我还没有找到解决方案。我希望能够在同一个请求中发送文件和 json 数据,但是如果不以某种方式拆分它们就无法工作,例如:不同的控制器方法或类似的东西。
标签: json asp.net-core asp.net-web-api postman