【问题标题】:Retrieve JSON object and file in MVC在 MVC 中检索 JSON 对象和文件
【发布时间】:2019-05-17 13:07:13
【问题描述】:

我有以下客户端代码使用 JQuery ajax 将 JSON 对象和文件发送到 MVC:

var formData = new FormData();
formData.append('logo', logoImg);
var objArr = [];

objArr.push({"id": id, "name": userName});

//JSON obj
formData.append('ocorrencia', JSON.stringify( objArr ));


$.ajax({
    url: "/Ocorrencia/Edit",
    type:"POST",
    processData:false,
    contentType: false,
    data: formData,
        complete: function(data){
                    alert("success");
            }
  });

在服务器端,我使用的是 ASP.NET MVC。

[HttpPost]
public JsonResult Edit()
{
    // How to retrieve the data and the file here?

我有一个“ocorrencia”的模型。我需要做什么才能在服务器端检索模型和文件?

【问题讨论】:

  • 您可以尝试在 WebApiConfig.csRegister 方法中添加GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));
  • @schlonzo ,它有什么作用?
  • @Taian 我的答案是正确的吗? :)

标签: c# json asp.net-mvc


【解决方案1】:

尝试使用FromBodyAttribute

using System.Web.Http; 
public JsonResult Edit([FromBody]List<Ocorrencia> ocorrencia,HttpPostedFileBase logo)
{
}

已编辑

using System.Web.Http 可以通过 NuGet 上的 Microsoft.AspNet.WebApi.Core 包添加。

【讨论】:

  • 我遇到错误“找不到类型或命名空间'FromBody'”。 =(
  • @Taian 你必须使用using Microsoft.AspNetCore.Mvc;
  • 我没有使用 AspNetCore,我只是使用 AspNet。
  • 所以使用using System.Web.Http; :)
  • 那里也没有 System.Web.Http =(
【解决方案2】:

您只需要在控制器上正确定义 Action 签名并使用 Newton Json。喜欢:

[HttpPost]
public JsonResult Edit(List<Ocorrencia> ocorrencia)
{
  var model = JsonConvert.DeserializeObject<List<Ocorrencia>>(ocorrencia);
   ...

上面的代码假设你有一个名为Ocorrencia的类。

【讨论】:

    【解决方案3】:

    您可以获得您的徽标文件和数据

    public JsonResult Edit(List<Ocorrencia> ocorrencia,HttpPostedFileBase logoImg)
    {
    }
    

    【讨论】:

      【解决方案4】:

      我要说你的 ajax 是错误的,你的中间内容和数据类型是错误的

      这是我现在正在使用的一个例子,效果很好

       $.ajax({
              type: "POST",
              headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
              url: url,
              data: JSON.stringify(model),
              contentType: "application/json; charset=utf-8",
              dataType: "json",
              success: function (result) {
                  ... success code here
              },
                  error: function (x, y, z) {
                  }
              });
      

      我将我的模型定义为

      var model = {
                   myObject: "somevalue"
                   myOtherObject: 2
                   }
      

      网址一目了然

      然后

      [HttpPost]
      [Route("sign")]
      public async Task<IActionResult> Sign([FromBody]ReportLessonSign model)
      {
       // your code in here
      }
      

      此时,json 对象被传递到我的模型中并进行相应处理。

      关于您的文件,您是如何尝试传递的?

      【讨论】:

      • 当我定义dataType 时,我无法发送文件。 dataType 必须设置为 false
      猜你喜欢
      • 2013-03-08
      • 2012-02-02
      • 1970-01-01
      • 2017-06-27
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多