【问题标题】:Passing data from ajax to asp.net core将数据从 ajax 传递到 asp.net 核心
【发布时间】:2021-03-19 08:18:55
【问题描述】:

我正在尝试将对象从 ajax 传递到 asp.net 核心

这里是asp代码

[HttpPost]
public async Task<IActionResult> AddOrUpdate([FromForm] LSPost lsPost, List<IFormFile> files)
{
    return await Task.Run<IActionResult>(() =>
    {
        try
        {
            JsonResult t = ImageUpload(files).Result as JsonResult;
            string[] fullFilePathsReturned = t.Value as string[];

            lsPost.Media = fullFilePathsReturned[0];
            lsPost.Update();
            return Ok();
        }
        catch (Exception ex)
        {
            return StatusCode(500);
        }
    });
}

这里是ajax调用

function UploadFile() {
    var lsPost = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(new LSPost()));

    lsPost.Title = $("#someText").val();

    console.log(lsPost);

    var fileData = new FormData();
    fileData.append("lsPost", lsPost);
    fileData.append("files", $("#someRandomID").get(0).files[0]);

    $.ajax({
        type: "POST",
        url: "/LSPostModel/AddOrUpdate",
        processData: false,
        contentType: false,
        data: fileData,
        success: function () {
        }
    });
}

参数“files”通过但“lsPost”没有。我尝试添加/删除[FromForm] / [FromBody] 标签。我尝试将fileData.append 的第一个参数与背面的参数名称匹配。我尝试将 javascript 对象名称与背面的参数名称匹配。没有任何工作....

【问题讨论】:

  • 数据是否真的被发布到服务器上?
  • 您可能需要将 List&lt;IFormFile&gt; files 交换为 IFormFile[] files,因为有时 C# 无法反序列化为 List
  • 这能回答你的问题吗? Upload files and JSON in ASP.NET Core Web API。我要做的唯一额外更改是fileData.append("lsPost", JSON.stringify(lsPost))

标签: ajax asp.net-core


【解决方案1】:

如果你想使用·formdata· 同时映射多个参数。请使用简单类型。例如,将formdata中的数据更改为基本类型值。将action的参数改为字符串。

//ajax
fileData.append("lsPost", lsPost.Title);

//action
[HttpPost]
public async Task<IActionResult> AddOrUpdate([FromForm] string lsPost, List<IFormFile> files)
    {
     //...

另一种解决方案,您也可以将List&lt;IFormFile&gt; 放入LSPost。例如:

//ajax
fileData.append("Title", lsPost.Title);

//action
[HttpPost]
public async Task<IActionResult> AddOrUpdate([FromForm] LSPost lsPost)
    {
     //...

型号

public class LSPost
{
    public string Title { get; set; }
    public List<IFormFile> files { get; set; }
}

注意:formdata的一项不能映射后端的复杂对象类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 2015-12-09
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2020-10-09
    • 2018-09-20
    相关资源
    最近更新 更多