c# - 如何将 FormData 与 ABP 的内置 RestService 一起使用?
问题描述
我想在基于 ABP 的应用程序中上传文件。
我的应用程序服务是这样创建的:
public async Task<IEnumerable<ScheduleDto>> UploadAsync(IFormFile File)
生成这样的 REST API 端点:
这很好。
现在,当我生成代理时,它创建了这样的客户端代理,它不接受文件作为输入,而是为以下内容创建 JSON IFormFile
:
upload = (File: IFormFile) =>
this.restService.request<any, ScheduleDto[]>({
method: 'POST',
url: `/api/app/schedule/upload`,
},
{ apiName: this.apiName });
由于这种方法没有用,我决定使用 ABP 框架提供的 REST 服务,因为它在内部处理成功和失败。我注入RestService
组件:
constructor(private matchService: MatchService, private scheduleService: ScheduleService,private rest: RestService) {} //
使用该服务,使用request
方法进行调用并将文件传递为FormData
,但是当我发布文件时没有任何反应:
UploadSchedule(files) {
const formData = new FormData();
formData.append('file', files[0], files[0].name);
this.rest.request<FormData, ScheduleDto[]>({
method: 'POST',
url: `/api/app/schedule`,
body: formData,
});
}
我可以使用 Angular 的 HTTP 服务上传文件,所以 API 端点没有问题。似乎 ABP 生成的服务只支持 JSON 数据而不支持FormData
.
解决方案
您可以使用内置的RestService
. 您的代码很好,唯一的问题是您没有返回 observable,并且没有人订阅它。还有,{ apiName: this.apiName }
好像不见了。简而言之,将UploadSchedule
方法更改为以下并从您调用的位置订阅它。
UploadSchedule(files) {
const formData = new FormData();
formData.append('file', files[0], files[0].name);
return this.rest.request<FormData, ScheduleDto[]>({
method: 'POST',
url: `/api/app/schedule`,
body: formData,
},
{ apiName: this.apiName });
}
推荐阅读
- sharepoint-2013 - SharePoint 2013:使用 StratusForms 我删除了“NewForm.aspx”,现在只有新的“NewForm”不起作用
- monitoring - 高标签基数但低度量/标签计数和不频繁采样是 Prometheus 可接受的用例吗?
- c# - 寻找一种使用 Entity Framework Core 为每一行检索一组多对多子项的有效方法
- sql-server - 用于全文搜索的自定义过滤器。IFilter 实现
- javascript - 对数组键值对象的数组进行排序
- telegram-bot - 电报机器人 Python
- android - 使用 Kotlin 在 Recycler View 中显示 JSON 值
- php - call_user_func_array("shell_exec", ...) 在 php 中不起作用
- javascript - JavaScript Object.hasOwnProperty() 问题
- wordpress - 如何制作联系表格 7 自定义字段?