суббота, 24 марта 2012 г.

ASP.NET Web API

В этой статье мы поговорим про ASP.NET Web API приложения. В ASP.NET MVC4 появился шаблон для ASP.NET Web API приложений. Дальше мы поговорим что собой представляет Web API приложение. Для создания Web API проекта надо выбрать тип приложения ASP.NET MVC4 и шаблон Web API.
image
Как видите, в отличии от обычного ASP.NET MVC приложения, в дереве проекта с HomeController появился еще один ValuesController.
image
Вот его код:
   1: public class ValuesController : ApiController
   2: {
   3:     // GET /api/values
   4:     public IEnumerable<string> Get()
   5:     {
   6:         return new string[] { "value1", "value2" };
   7:     }
   8:  
   9:     // GET /api/values/5
  10:     public string Get(int id)
  11:     {
  12:         return "value";
  13:     }
  14:  
  15:     // POST /api/values
  16:     public void Post(string value)
  17:     {
  18:     }
  19:  
  20:     // PUT /api/values/5
  21:     public void Put(int id, string value)
  22:     {
  23:     }
  24:  
  25:     // DELETE /api/values/5
  26:     public void Delete(int id)
  27:     {
  28:     }
  29: }
Для каждого популярного запроса сразу создан метод. Мне этого очень не хватало в предыдущих версиях ASP.NET MVC фреймворка. ApiController позволяет сделать логику нашего приложения более прозрачной для понимания. Можем распределить ответственность одних контроллеров за генерацию View, а других – чисто за работу с данными.В файле Global.asax в методе RegisterRoutes для него есть своя секция (с именем DefaultApi):

   1: public static void RegisterRoutes(RouteCollection routes)
   2: {
   3:     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
   4:  
   5:     routes.MapHttpRoute(
   6:         name: "DefaultApi",
   7:         routeTemplate: "api/{controller}/{id}",
   8:         defaults: new { id = RouteParameter.Optional }
   9:     );
  10:  
  11:     routes.MapRoute(
  12:         name: "Default",
  13:         url: "{controller}/{action}/{id}",
  14:         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  15:     );
  16: }

Запустив наше приложение, увидим такую вот страницу, которую возвращает HomeController:image
Сейчас продемонстрируем как работает ValuesController. По умолчанию контент отдается в формате JSON. Перейдя по ссылке http://localhost:9184/api/values нашего приложения в Internet Explorer, мы сгенерируем GET запрос и получим такой JSON ответ:
["value1","value2"]

А если открыть сссылу в Chrome, то получим ответ в XML:
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>value1</string>
<string>value2</string>
</ArrayOfString>
Дело в том, что Chrome, как и Firefox, в заголовках запроса запрашивает выдачу в формате XML.
image
Это очень удобно, когда один и тот же код может возвращать одни и те же данные в разных форматах автоматически, основываясь на параметрах запроса.
Для того, чтобы постоянно ответ запроса отдавался в JSON, можно в функции Application_Start() из Global.asax файла прописать такую строчку:
   1: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
Откроем теперь ссылку в Chrome и увидим уже вывод в формате JSON.
image
P.S. Рекомендую посмотреть видео Getting Started with ASP.NET Web API - http://www.asp.net/web-api/videos/getting-started

Комментариев нет:

Отправить комментарий

Popular Posts