Angular 如何在[FromBody]ASP.NET CORE 2中接收文件&;角度5

Angular 如何在[FromBody]ASP.NET CORE 2中接收文件&;角度5,angular,file-upload,asp.net-core,angular5,Angular,File Upload,Asp.net Core,Angular5,我想将文件图像从我的表单发送到我的ASP.NET 到目前为止,我做到了: 我的天使: 组织界面: export interface Organization { id: number; organizationName: string; legalName: string; logoUrl: string; logoFile: any; .... } organization.form.html ... 法定/商号 需要法定/商业名称 标志

我想将文件图像从我的表单发送到我的ASP.NET 到目前为止,我做到了:

我的天使:

组织界面:

export interface Organization {
    id: number;
    organizationName: string;
    legalName: string;
    logoUrl: string;
    logoFile: any;
    ....
}
organization.form.html


...
法定/商号
需要法定/商业名称
标志
标志是必需的

我认为您的Http调用有点简化。 尝试添加内容类型:

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization': 'my-auth-token' // if you have one
  })
};

addOrganization (org: Organization): Observable<Organization> {
  return this.httpClient.post<Organization>(this.heroesUrl, org, httpOptions)
    .pipe(
      catchError(this.handleError('addOrganization ', org))
    );
}

根据我的经验,你不能像普通的Json请求那样发送文件数据。为此,您必须使用表单数据。那么您的请求将如下所示:

let formToPost = new FormData();
//stringify your normal request
let requestToPost = JSON.stringify({id:1; organizationName: ABC; legalName: DEF}); 

formToPost .append("request", requestToPost);
formToPost .append("logoFile", YOUR_IMAGE_FILE);
[HttpPost]
public async Task<YOUR_RESPON> AddTicketAsync(string request, List<IFormFile> logoFile)
{
  var request = JsonConvert.DeserializeObject<YOUR_TYPE>(request);
}
然后在控制器级别,您可以执行以下操作:

let formToPost = new FormData();
//stringify your normal request
let requestToPost = JSON.stringify({id:1; organizationName: ABC; legalName: DEF}); 

formToPost .append("request", requestToPost);
formToPost .append("logoFile", YOUR_IMAGE_FILE);
[HttpPost]
public async Task<YOUR_RESPON> AddTicketAsync(string request, List<IFormFile> logoFile)
{
  var request = JsonConvert.DeserializeObject<YOUR_TYPE>(request);
}
[HttpPost]
公共异步任务AddTicketAsync(字符串请求、列表日志文件)
{
var request=JsonConvert.DeserializeObject(请求);
}
在这里,您可以直接访问您的图像文件


希望这有帮助:)

您的图像文件是从var FILE=event.target.files[0]获取的吗;或者我应该使用FileReader的结果吗?您应该能够从var file=event.target.files[0]获取它;那是不对的。JSON成员只需要是一个JavaScript数组(表示实际字节的整数)或一个Base64编码的字符串。ASP.NET Core可以处理其中一个,并将结果绑定到字节[]。要通过JSON发送文件,它必须是字节的JavaScript数组或Base64编码字符串。我对Angular不够熟悉,无法告诉您如何到达那里,但这应该很容易理解。在ASP.NET Core端,您需要绑定到类型为
byte[]
的属性,而不是
IFormFile
,后者仅适用于
multipart/form data
encoded post body。我之所以使用IFormFile,是因为我阅读了microsoft文档中关于在dotnet Core中上载文件的内容,但他们的示例使用了razor pagesYeah,他们通过传统的HTML表单(编码为多部分/表单数据)发布。您没有这样做,所以它需要是一个字节[]。