BAD Reuqest无法创建和填充列表类型Microsoft.AspNetCore.Http.IFormFileCollection

时间:2019-05-13 03:22:17

标签: angular typescript asp.net-core

上传文件并将其转换为json并传递给.net核心webapi控制器时,我收到错误的请求。

这里是一个错误屏幕截图。我也已经控制了模型。

enter image description here

这是我在打字稿中的代码

        const httpHeaders = new HttpHeaders({
          'Content-Type': 'application/json',
        });
        var approval = {
          ...this.MemberApproval,
        };
        console.log(JSON.stringify(approval));
        return this.http.post(this.Url + '/Member/UpdateMember/update',   JSON.stringify(approval), { headers: httpHeaders });

在.net核心webapi上,我正在这样做。

我的模特:

      public class MemberApproval
        {
            public string Notes;
            public IFormCollection Attachment;
            public int ApprovalStatus;
            public int SubsId;
            public int MemberId;
        }

我的控制器:

         [Route("[action]/{item}")]
            [HttpPost]
            public IActionResult UpdateMember([FromBody]MemberApproval approval )
            {


                if (approval !=null)
                {
                    _repo.UpdateMemberStatus(approval);

                }

                return Ok();
            }

1 个答案:

答案 0 :(得分:1)

如果要向ASP.Net Core提交文件,则必须像这样使用FromForm和IFormFile

[HttpPost("SavePost")]
public async Task<IActionResult> SavePost([FromForm]PostViewModel viewModel)
{
    var postOptionsViewModel = _jsonParsePostOptionDefaultVm.ToObject(viewModel.PostOptionsViewModel);
    viewModel.PostOptionsDefaultViewModel = postOptionsViewModel;

    if (viewModel.Id.HasValue)
    {
        await _postRepository.EditPost(viewModel);
    }
    else
    {
        await _postRepository.SavePost(viewModel);
    }

    return Ok();
}

我的模型将具有属性列表,以便您可以将多个文件提交到服务器

public List<IFormFile> File { get; set; }

我的FE辅助代码将是这样。我使用的是react,但在我们向服务器提交表单数据的方式上几乎没有什么不同

const formdata = new FormData();
formdata.append("Title", this.state.title);
formdata.append("File", this.state.File);

请记住将Content-Type标头设置为“ multipart / form-data”