2016-12-06 92 views
0

我正在使用ApiController,并且无法调用返回XML以外的其他任何东西。C#API返回字符串而不是XML包装的字符串

public class GuideController : ApiController 
{ 
    [AcceptVerbs("GET")] 

    [HttpGet] 
    public string Get() 
    { 
     Item item = Item.GetTestData(); 
     string json = JsonConvert.SerializeObject(item); 
     return json; 
    } 
} 

理想情况下,我想正常返回JSON,但我会解决返回原始字符串而不是XML包装。

+0

什么是请求的接受标头? –

+1

[我如何获得ASP.NET Web API使用Chrome返回JSON而不是XML?](http://stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web -api-to-return-json-instead-of-xml-using-chrome) –

+0

另外,应该不需要在控制器操作中序列化对象。其实,这甚至不是一个好主意。首先,你正在做一个操作(序列化),最好在一个单独的地方进行处理,在管道中进行更高的处理,并将其复制到每个控制器操作中。第二个问题是你正在绞尽脑汁地谈判内容。 –

回答

3

确保api只返回JSON的简单方法是从http配置中删除xml格式化程序。

,您可以访问格式化的WebApiConfig类

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     //Clear current formatters 
     config.Formatters.Clear(); 

     //Add only a json formatter 
     config.Formatters.Add(new JsonMediaTypeFormatter()); 

    } 
} 

UPDATE

不要序列化控制器的对象。按原样返回对象。 Web api会为你做这件事,因为你已经将json格式化程序附加到配置中。

public class GuideController : ApiController 
{ 
    [AcceptVerbs("GET")] 

    [HttpGet] 
    public IHttpActionResult Get() 
    { 
     Item item = Item.GetTestData(); 
     return Ok(item); 
    } 
} 
+0

这对我而言并不适用。 – Gianthra

+0

谢谢你,它完美的工作。 – Gianthra

0

尝试在客户端设置Accept标头。在您的客户端应用程序/ JSON

:如果你想收到JSON,设置

接受。希望有所帮助。

0

尝试显式返回JSON。

[HttpGet] 
public IHttpActionResult Get() 
{ 
    Item item = Item.GetTestData();  
    return Json(item); 
} 
相关问题