从web api控制器返回json

时间:2015-09-03 07:31:59

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

我有web api控制器:

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

返回给客户端的字符串是这样的:“{\”success \“:\”false \“,\”msg \“:\”没有文件或用户ID!\“}”;

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

2 个答案:

答案 0 :(得分:4)

尝试自动序列化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]

答案 1 :(得分:0)

试试这个:

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

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