2016-09-05 3 views
1

Я хотел бы создать webservices, возвращающий json. Тем не менее, я всегда получаю текст/html в качестве типа содержимого ответов.Почему asp.net webAPI всегда возвращает text/html?

Первый выстрел:

public StringContent Get() 
{ 
    List<Cell> list = new List<Cell>(); 
    Cell c = new Cell("Cell1"); 
    Cell c2 = new Cell("Cell2"); 
    list.Add(c); 
    list.Add(c2); 

    return new StringContent(
     Newtonsoft.Json.JsonConvert.SerializeObject(list), 
     Encoding.UTF8, 
     "application/json"); 
} 

Responsecontent: System.Net.Http.StringContent

второй выстрел:

public List<Cell> Get() 
    { 
     Cell c = new Models.Cell("Cell1"); 
     List<Cell> list = new List<Cell>(); 
     list.Add(c); 
     return list; 
    } 

Responsecontent: System.Collections.Generic.List`1 [TestApp .Models.Cell]

Это, как я получить доступ к конечной точке:

$.ajax({ 
      url: "http://localhost:54787/Cell/Get", 
      type: "GET", 
      contentType:"application/json", 
      accepts: { 
       text: "application/json" 
      },  
      success: function (response) { 
       $("#result").html(JSON.parse(response)); 
      }, 
      error: function (xhr, status) { 
       alert("error"); 
      } 
     }); 

enter image description here

+0

Как вы тестируете конечную точку? – zulq

+0

Я вызываю '/ Cell/Get' из хром. Я также попробовал запрос jQuery $ .ajax get и проверил сетевой монитор хром. – user66875

+1

Вы видели это? http://stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web-api-to-return-json-instead-of-xml-using-chrome?rq=1 – zulq

ответ

1

Если у вас нет причины делать сериализацию вручную, вы должны использовать веб-механизм API по умолчанию, возвращая объект вместо StringContent , Например, вы можете изменить свой метод, чтобы сразу вернуть List<Cell>.

public List<Cell> Get() 
{ 
    // return List<Cell> just like you write a typical method 
} 

Таким образом, вы не получите text/html больше. Однако вы все равно получите XML в Chrome. Это связано с тем, что HTTP-заголовок HTTP по умолчанию содержит application/xml, и он поддерживается по умолчанию в Web API. Если у вас нет необходимости поддерживать результат XML, так что вы можете удалить его с помощью следующего кода при запуске (возможно, в Global.asax)

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 

PS: Если вы не знаете, нужно ли вам XML или нет, то вам это не нужно.

+0

Спасибо. Я обновил свой пост и добавил результат вашего кода. Я действительно не понимаю, почему он все еще возвращает 'text/html'. – user66875

Смежные вопросы