2016-12-06 2 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 для возврата JSON вместо XML с помощью Chrome?] (Http://stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web -api-to-return-json-вместо-xml-using-chrome) –

+0

Кроме того, вам не нужно будет сериализовать ваш объект в действии контроллера. На самом деле, это даже не очень хорошая идея. Во-первых, вы выполняете операцию (сериализацию), которая лучше всего обрабатывается в одном месте, выше в конвейере и копирует ее по каждому из действий вашего контроллера. Вторая проблема заключается в том, что вы затрудняете согласование контента. –

ответ

3

Простой способ убедиться, что api возвращает JSON только для удаления форматирования xml из конфигурации http.

Вы можете получить доступ к форматтерам в 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 formatter к конфигурации.

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

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

Это не сработало для меня, к сожалению. – Gianthra

+0

Спасибо за это, он отлично работал. – Gianthra

0

Попробуйте настроить заголовок Accept на клиенте. Если вы хотите получить JSON, установите

Accept: приложения/JSON

в клиенте. Надеюсь, это поможет.

0

Попытайтесь вернуть JSON явно.

[HttpGet] 
public IHttpActionResult Get() 
{ 
    Item item = Item.GetTestData();  
    return Json(item); 
} 
Смежные вопросы