Return json 来自网络 api 控制器

Return json from web api controller

我有网络 api 控制器:

[HttpPost]
    public String UploadFile()
    {//do some logic
       String jsResult="{\"success\":\"false\", \"msg\":\"No file or user ID!\"}";
       return jsResult;
    }

返回给客户端的字符串是这样的:"{\"success\":\"false\",\"msg\":\"No file or user ID!\"}";

我手动编写了 json 字符串,但客户端不解析它(我猜是因为 returned 字符串用“\”转义了。 从这个控制器方法 return json 字符串到 clinet 的正确方法是什么?

尝试自动序列化 webapi:

创建模型:

public class UploadResult
{
    public UploadResult()
    {

    }
    public bool Success  { get; set; }
    public string Msg { get; set; }
}

和return

public UploadResult UploadFile()
{
    var r = new UploadResult(){ Success = false, Msg = "No file or user ID!" };
    return r;
}

在您的示例中,您显式地进行了序列化,结果最终序列化了两次。因为 WebApi 已经在管道中有 Json 序列化器。

要异步:

public async Task<IHttpActionResult> UploadFile()
{
    var r = new UploadResult(){ Success = false, Msg = "No file or user ID!" };
    // some "await" logic
    return Ok(r);
}

添加 using System.Web.Mvc 失败,因为

[System.Web.Http.HttpPost]  != [System.Web.Mvc.HttpPost]

并且[HttpPost]有歧义。无论如何,不需要 Mvc 引用。删除它并重新添加 [HttpPost]

试试这个:

[HttpPost]
public JsonResult UploadFile()
{//do some logic
   String jsResult="{\"success\":\"false\", \"msg\":\"No file or user ID!\"}";
   return Json(jsResult);
}

我已将 return 类型更改为 JsonResult 并使用 Json 方法格式化您的结果。