Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ASP.NET MVC Урок 1-F / ASP.NET MVC Урок B

.pdf
Скачиваний:
39
Добавлен:
09.03.2016
Размер:
639.56 Кб
Скачать

$63 1(7 09& ǻȘȖȒ % -VRQ tutorial

ASP*, .NET*

Цель урока. Научиться работать с форматом json. Инструменты по работе с json. Написание сторонних запросов, авторизация через получение данных от facebook и vkontakte. Ajax в работе с json (авторизацию переписать). API сайта.

Json и Json.net

Json – это текстовый формат данных, основанный на Javascript. Пример данных в Json:

^

ILUVW1DPH ɂɜɚɧ

ODVW1DPH ɂɜɚɧɨɜ

DGGUHVV^

VWUHHW$GGUHVV Ɇɨɫɤɨɜɫɤɨɟ ɲ ɤɜ

FLW\ Ʌɟɧɢɧɝɪɚɞ

SRVWDO&RGH

`

SKRQH1XPEHUV>

 

@

`

 

В своей практике я работал с json с такими приложениями как yandex.maps api, facebook api, vk api, bronni api (это такой туристический портал), и даже при работе с биткоин­кошельком. Для этого используется JSON.net библиотека от http://james.newtonking.com/pages/json­net.aspx.

Изучим ее подробнее:

Установим

Изучим преобразования из json в объекты и назад

Десериализация из сложных форматов

Работа с facebook API (пример) — авторизация

Устрановим

30! *HW 3DFNDJH-VRQQHW

,G 9HUVLRQ 'HVFULSWLRQ 5HOHDVH 1RWHV

1HZWRQVRIW -VRQ -VRQ1(7LVDSRSXODU KLJK SHUIRUPDQFH 30! ,QVWDOO 3DFNDJH 1HZWRQVRIW -VRQ

6XFFHVVIXOO\ LQVWDOOHG1HZWRQVRIW-VRQ

6XFFHVVIXOO\ DGGHG1HZWRQVRIW-VRQWR /HVVRQ3URMHFW

Документация

По этой ссылке находится документация. Мы начнем с простого преобразования объекта в json­ формат и обратно. Создадим LessonProject.Console и сделаем его проектом по­умолчанию. Добавим тип User:

SXEOLF FODVV 8VHU

^

SXEOLF VWULQJ,G ^JHW VHW`

SXEOLF VWULQJ1DPH ^JHW VHW`

SXEOLF VWULQJ)LUVW1DPH ^JHW VHW`

SXEOLF VWULQJ0LGGOH1DPH ^JHW VHW`

SXEOLF VWULQJ/DVW1DPH ^JHW VHW`

SXEOLF VWULQJ8VHU1DPH ^JHW VHW`

SXEOLF VWULQJ*HQGHU ^JHW VHW`

SXEOLF VWULQJ(PDLO ^JHW VHW`

`

Создадим объект и преобразуем в json:

YDUXVHU QHZ8VHU

^

,G

(PDLO FKHUQLNRY#JPDLO FRP

8VHU1DPH UROOLQ[

1DPH $QGUH\

)LUVW1DPH $QGUH\

0LGGOH1DPH $OH[DQGURYLFK

/DVW1DPH &KHUQLNRY

*HQGHU 0

`

YDUMVRQ8VHU -VRQ&RQYHUW 6HULDOL]H2EMHFW XVHU

6\VWHP &RQVROH :ULWH MVRQ8VHU

6\VWHP &RQVROH 5HDG/LQH

Результат:

^,G 1DPH $QGUH\ )LUVW1DPH $QGUH\ 0LGGOH1DPH $OH[DQGURYLFK /DVW1DPH &KHUQLN RY 8VHU1DPH UROOLQ[ *HQGHU 0 (PDLO FKHUQLNRY#JPDLO FRP`

Попробуем обратное:

YDUMVRQ8VHU6RXUFH ^? ,G? ? ? ? 1DPH? ?$QGUH\? ? )LUVW1DPH? ?$QGUH\? ? 0LGGOH1DP H? ?$OH[DQGURYLFK? ? /DVW1DPH? ? &KHUQLNRY? ? 8VHU1DPH? ? UROOLQ[? ? *HQGHU? ? 0? ? (PDL O? ? FKHUQLNRY#JPDLO FRP? `

YDUXVHU -VRQ&RQYHUW 'HVHULDOL]H2EMHFW 8VHU! MVRQ8VHU6RXUFH

И получаем результат:

Т.е. работает в обоих направлениях. Но немного усложним. Например, зададим Gender через перечисляемый тип Male и Female, и в json должно передаваться именно Male и Female. А Id – это числовое значение:

SXEOLF FODVV 8VHU

^

SXEOLF HQXP*HQGHU(QXP

^

0DOH

)HPDOH

`

SXEOLF LQW,G ^JHW VHW`

SXEOLF VWULQJ1DPH ^JHW VHW`

SXEOLF VWULQJ)LUVW1DPH ^JHW VHW`

SXEOLF VWULQJ0LGGOH1DPH ^JHW VHW`

SXEOLF VWULQJ/DVW1DPH ^JHW VHW`

SXEOLF VWULQJ8VHU1DPH ^JHW VHW`

SXEOLF*HQGHU(QXP *HQGHU ^JHW VHW`

SXEOLF VWULQJ(PDLO ^JHW VHW`

`

Пробуем первую часть:

YDUXVHU QHZ8VHU

^

,G

(PDLO FKHUQLNRY#JPDLO FRP

8VHU1DPH UROOLQ[

1DPH $QGUH\

)LUVW1DPH $QGUH\

0LGGOH1DPH $OH[DQGURYLFK

/DVW1DPH &KHUQLNRY

*HQGHU 8VHU *HQGHU(QXP 0DOH

`

YDUMVRQ8VHU -VRQ&RQYHUW 6HULDOL]H2EMHFW XVHU

Результат:

^,G 1DPH $QGUH\ )LUVW1DPH $QGUH\ 0LGGOH1DPH $OH[DQGURYLFK /DVW1DPH &KHUQLNR Y 8VHU1DPH UROOLQ[ *HQGHU (PDLO FKHUQLNRY#JPDLO FRP`

Добавим:

>-VRQ&RQYHUWHUW\SHRI6WULQJ(QXP&RQYHUWHU @

SXEOLF HQXP*HQGHU(QXP

^

0DOH

)HPDOH

`

Результат:

^,G 1DPH $QGUH\ )LUVW1DPH $QGUH\ 0LGGOH1DPH $OH[DQGURYLFK /DVW1DPH &KHUQLNR

Y 8VHU1DPH UROOLQ[ *HQGHU 0DOH (PDLO FKHUQLNRY#JPDLO FRP`

Уже лучше. Обратно проверяем – всё ок. Изучим другие атрибуты, задающие тонкие правила настройки. Например, в json­формате будут имена в венгерской записи типа first_name:

>-VRQ2EMHFW@

SXEOLF FODVV 8VHU

^

>-VRQ&RQYHUWHUW\SHRI6WULQJ(QXP&RQYHUWHU @

SXEOLF HQXP*HQGHU(QXP

^

0DOH

)HPDOH

`

>-VRQ3URSHUW\LG@

SXEOLF LQW,G ^JHW VHW`

>-VRQ3URSHUW\QDPH@

SXEOLF VWULQJ1DPH ^JHW VHW`

>-VRQ3URSHUW\ILUVWBQDPH@

SXEOLF VWULQJ)LUVW1DPH ^JHW VHW`

>-VRQ3URSHUW\PLGGOHBQDPH@

SXEOLF VWULQJ0LGGOH1DPH ^JHW VHW`

>-VRQ3URSHUW\ODVWBQDPH@

SXEOLF VWULQJ/DVW1DPH ^JHW VHW`

>-VRQ3URSHUW\XVHUBQDPH@

SXEOLF VWULQJ8VHU1DPH ^JHW VHW`

>-VRQ3URSHUW\JHQGHU@

SXEOLF*HQGHU(QXP *HQGHU ^JHW VHW`

>-VRQ3URSHUW\HPDLO@

SXEOLF VWULQJ(PDLO ^JHW VHW`

`

Результат:

^LG QDPH $QGUH\ ILUVWBQDPH $QGUH\ PLGGOHBQDPH $OH[DQGURYLFK ODVWBQDPH &KHUQL NRY XVHUBQDPH UROOLQ[ JHQGHU 0DOH HPDLO FKHUQLNRY#JPDLO FRP`

Для описания списка добавим класс Photo:

>-VRQ2EMHFW@

SXEOLF FODVV 3KRWR

^

>-VRQ3URSHUW\LG@

SXEOLF LQW,G ^JHW VHW`

>-VRQ3URSHUW\QDPH@

SXEOLF VWULQJ1DPH ^JHW VHW`

`

И в User добавим:

>-VRQ3URSHUW\SKRWRBDOEXP@ SXEOLF/LVW 3KRWR! 3KRWR$OEXP ^JHW VHW`

Результат:

^LG QDPH $QGUH\ ILUVWBQDPH $QGUH\ PLGGOHBQDPH $OH[DQGURYLFK ODVWBQDPH &KHUQL NRY XVHUBQDPH UROOLQ[ JHQGHU 0DOH HPDLO FKHUQLNRY#JPDLO FRP SKRWRBDOEXP>^L G QDPH ə ɫ ɢɧɫɬɚɝɪɚɦɦɨɦ` ^LG QDPH ə ɧɚ ɮɨɧɟ ɡɚɧɢɠɟɧɧɨɝɨ ɬɚɡɚ`@`

Всё просто и предсказуемо.

Разберем сложный случай, например, когда для Gender нам надо описывать не Male\Female, а M\F. Для этого создаем класс по разбору GenderEnumConverter:

SXEOLF FODVV *HQGHU(QXP&RQYHUWHU -VRQ&RQYHUWHU

^

SXEOLF RYHUULGH REMHFW 5HDG-VRQ -VRQ5HDGHU UHDGHU

7\SH REMHFW7\SH

REMHFWH[LVWLQJ9DOXH

-VRQ6HULDOL]HU VHULDOL]HU

^

YDU YDOXH UHDGHU 9DOXH 7R6WULQJ

LI VWULQJ&RPSDUHYDOXH 0 WUXH

^

UHWXUQ8VHU *HQGHU(QXP 0DOH

`

LI VWULQJ&RPSDUHYDOXH ) WUXH

^

UHWXUQ8VHU *HQGHU(QXP )HPDOH

`

UHWXUQ8VHU *HQGHU(QXP 0DOH

`

SXEOLF RYHUULGH YRLG :ULWH-VRQ -VRQ:ULWHU ZULWHUREMHFW YDOXH -VRQ6HULDOL]HU VHULDOL]H U

^

YDUREM 8VHU *HQGHU(QXPYDOXH

:ULWH DVVRFLDWLYH DUUD\ ILHOG QDPH

ZULWHU :ULWH9DOXHYDOXH7R6WULQJ 6XEVWULQJ

`

SXEOLF RYHUULGH ERRO &DQ&RQYHUW7\SH REMHFW7\SH

^

UHWXUQ IDOVH

`

`

И устанавливаем этот конвертер для обработки

>-VRQ&RQYHUWHUW\SHRI*HQGHU(QXP&RQYHUWHU @

SXEOLF HQXP*HQGHU(QXP

^

0DOH

)HPDOH

`

Вообще, конвертеры могут быть бесконечно сложными для разбора json­данных. Можно обрабатывать нетипичные записи дат, сложные структуры данных, формировать сериализацию своих классов.

Работа с facebook

Всё это понятно и скучно, так что метнемся работать с facebook API. Развлечений всем! Для начала заведем проект LessonProject.FacebookAPI. Добавим туда Json.NET и свяжем с основным проектом.

На facebook надо завести ApplicationID по адресу: https://developers.facebook.com/apps

Создаем, получаем:

Нам интересно будет AppID и AppSecret.

Добавляем эти данные в Config/FacebookSetting.cs (уже знаем, как это делается):

SXEOLF FODVV )DFHERRN6HWWLQJ &RQILJXUDWLRQ6HFWLRQ

^

>&RQILJXUDWLRQ3URSHUW\ $SS,',V5HTXLUHG WUXH@

SXEOLF VWULQJ $SS,'

^

JHW

^

UHWXUQ WKLV> $SS,'@DV VWULQJ

`

VHW

^

WKLV> $SS,'@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\ $SS6HFUHW,V5HTXLUHG WUXH@

SXEOLF VWULQJ $SS6HFUHW

^

JHW

^

UHWXUQ WKLV> $SS6HFUHW@DV VWULQJ

`

VHW

^

WKLV> $SS6HFUHW@ YDOXH

`

`

`

Общение с фейсбуком происходит так:

Попросим пользователя авторизоваться, так мы узнаем, какие права у нас есть

Ответом этого будет токен доступа, по нему мы будем получать информацию Получаем информацию про самого пользователя

Создадим интерфейс, который будет реализовывать наш FacebookSetting (чтобы была обратная совместимость) (LessonProject.FacebookAPI/IFbAppConfig.cs):

SXEOLF LQWHUIDFH ,)E$SS&RQILJ

^

VWULQJ $SS,' ^JHW`

VWULQJ $SS6HFUHW ^JHW`

`

Добавляем в FacebookSetting (/Global/Config/FacebookSetting.cs):

SXEOLF FODVV )DFHERRN6HWWLQJ &RQILJXUDWLRQ6HFWLRQ ,)E$SS&RQILJ

Используя наш AppID, мы идем по строке типа:

KWWSVZZZIDFHERRN FRP GLDORJ RDXWK"FOLHQWBLG UHGLUHFWBXUL KWWS$) )ORFDOKR VW$))DFHERRN )7RNHQ VFRSH HPDLO

И это выглядит так:

Если мы нажимаем «Перейти к приложению» — то нас переправляют на страницу

KWWS ORFDOKRVW )DFHERRN 7RNHQ с параметром code, по которому мы можем получить токен (который действует некоторое время). Выполняем такой запрос:

KWWSVJUDSK IDFHERRN FRP RDXWK DFFHVVBWRNHQ"FOLHQWBLG UHGLUHFWBXUL KWWS ORFDO KRVW)DFHERRN 7RNHQ FOLHQWBVHFUHW H GH IG I H GFH E D D FRGH $4$6F.8<.*S]ZLM]7 < 6+M12G 4 QV\U<3G-D3K; U Z%2X0UGLP/ K E*Y +$K 7/ R-\= J1JL% %F&H+ *B=M K KOIWB%)E2I,-,=-% Q.: 4 L5 D 99,P[0 4<-DV H9J TW<1NT8F:EJ;'6.-(1FXRP8; KD[)8)G.;U9M/ DF1=6RF(6V[ QI[B)\)B4OEZQ82 FZRJ

U/S

На что получаем ответ:

DFFHVVBWRNHQ $$$% 'D =%P5 %$0&2[ =$U<Y)X R5NP=&UZ=$EYS:=% =&/%HLRRVO\<3=%9Z+M[6SH .]-9/)3,[ZZ I ' 7,(L0$S]8 (0R'S2[( X$='=' H[SLUHV

Нам нужен этот access_token, сохраняем его, и с помощью него мы запрашиваем данные по ссылке:

Соседние файлы в папке ASP.NET MVC Урок 1-F