【问题标题】:Return json from web api controller从 web api 控制器返回 json
【发布时间】:2015-09-03 07:31:59
【问题描述】:

我有 web 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 字符串,但客户端不解析它(我猜是因为返回的字符串用“\”转义。 从这个控制器方法返回 json 字符串到客户端的正确方法是什么?

【问题讨论】:

    标签: json asp.net-web-api2 asp.net-web-api


    【解决方案1】:

    尝试自动序列化 webapi:

    创建模型:

    public class UploadResult
    {
        public UploadResult()
        {
    
        }
        public bool Success  { get; set; }
        public string Msg { get; set; }
    }
    

    然后返回

    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 ref 是不必要的。删除它并重新添加 [HttpPost]

    【讨论】:

    • 我有 ApiController: public class ImportReservationController : ApiController 它没有 JsonResult 选项。如果我添加引用(使用 System.Web.Mvc;),那么我可以编写 JsonResult,但 [HttpPost] 则不起作用。我猜 API 控制器不支持 JsonResult。
    • 现在可以使用了。由于我是 web api 的新手,你能用几句话解释我吗?为什么如果我添加对 MVC 的引用它会停止工作? [HttpPost] 不再可用。谢谢。
    • 谢谢。其他选项是像这样添加:[System.Web.Mvc.HttpPost] 而且我可以使用 JsonResult 结果吗?
    • 嗨,如果过程以表格形式返回结果怎么办。将表作为 json 结果返回的最佳方法是什么?
    • 谢谢。现在一切都清楚了。我将提出一个新问题。
    【解决方案2】:

    试试这个:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2015-10-10
      • 2016-03-22
      • 2015-11-24
      • 1970-01-01
      • 2022-02-09
      相关资源
      最近更新 更多