2015-09-03 67 views
3

我有網頁API控制器:從網頁API控制器返回JSON

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

返回的字符串到客戶端是這樣的: 「{\」 成功\ 「:\」 假\」,\ 「MSG \」 :\「沒有文件或用戶ID!\」}「;

我手動編寫JSON字符串,但客戶端不解析它(我猜是因爲返回的字符串用「\」轉義。 什麼將JSON字符串從這個控制器方法返回到客戶爲例的正確方法?

回答

3

嘗試自動序列化的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串行器。

要進入異步:因爲

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

而且[HttpPost]是模糊的

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失敗。無論如何,Mvc ref是沒有必要的。刪除它,再添加[HttpPost]

+0

我有ApiController: 公共類ImportReservationController:ApiController 它沒有JsonResult選項。 如果我添加引用(使用System.Web.Mvc;)然後我可以編寫JsonResult,但[HttpPost]不起作用。 我猜API控制器不支持JsonResult。 – Simon

+0

它現在有效。你可以用幾個詞來解釋我,因爲我是web api的新手。爲什麼如果我添加引用MVC停止工作? [HttpPost]不再可用。謝謝。 – Simon

+0

@Simon更新! – Mate

0

試試這個:

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

我已經改變了返回類型JsonResult和使用JSON的方法來格式化你的結果。