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

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

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

KWWSV JUDSK IDFHERRNFRP PH"DFFHVVBWRNHQ $$$% 'D =%P5 %$,PL72 4ZX8;EJ+3/=%4:P$\=%8NM5$D91V Y DTD)PW K =%YXU8SY1 (;GG\ G-OG=$M:7[6G H=%+O<0].ZG[J='='

На что он нам отвечает:

^LG QDPH $QGUH\ &KHUQLNRY ILUVWBQDPH $QGUH\ ODVWBQDPH &KHUQLNRY OLQ N KWWS ? ? ZZZ IDFHERRN FRP? FKHUQLNRY XVHUQDPH FKHUQLNRY JHQGHU PDOH HPDLO FKHUQ LNRY?X JPDLO FRP WLPH]RQH ORFDOH UXB58 YHULILHG WUXH XSGDWHGBWLPH 7

`

И вот это мы приведем к классу FbUserInfo (LessonProject.FacebookAPI/FbUserInfo.cs):

>-VRQ2EMHFW@

SXEOLF FODVV )E8VHU,QIR

^

>-VRQ3URSHUW\LG@

SXEOLF VWULQJ,G ^JHW VHW`

>-VRQ3URSHUW\QDPH@

SXEOLF VWULQJ1DPH ^JHW VHW`

>-VRQ3URSHUW\ILUVWBQDPH@

SXEOLF VWULQJ)LUVW1DPH ^JHW VHW`

>-VRQ3URSHUW\ODVWBQDPH@

SXEOLF VWULQJ/DVW1DPH ^JHW VHW`

>-VRQ3URSHUW\OLQN@

SXEOLF VWULQJ/LQN ^JHW VHW`

>-VRQ3URSHUW\XVHUQDPH@

SXEOLF VWULQJ8VHU1DPH ^JHW VHW`

>-VRQ3URSHUW\JHQGHU@

SXEOLF VWULQJ*HQGHU ^JHW VHW`

>-VRQ3URSHUW\HPDLO@

SXEOLF VWULQJ(PDLO ^JHW VHW`

>-VRQ3URSHUW\ORFDOH@

SXEOLF VWULQJ/RFDOH ^JHW VHW`

>-VRQ3URSHUW\WLPH]RQH@

SXEOLF GRXEOH" 7LPH]RQH ^JHW VHW`

>-VRQ3URSHUW\YHULILHG@

SXEOLF ERRO" 9HULILHG ^JHW VHW`

>-VRQ3URSHUW\XSGDWHGBWLPH@

SXEOLF'DWH7LPH" XSGDWHG7LPH ^JHW VHW`

`

Всю описанную выше работу заключаем в FbProvider.cs (LessonProject.FacebookAPI/Provider.cs):

SXEOLF FODVV )E3URYLGHU

^

SULYDWH VWDWLF VWULQJ $XWKRUL]H8UL KWWSV JUDSK IDFHERRN FRP RDXWK DXWKRUL]H"FOLHQWBL G ^ ` UHGLUHFWBXUL ^ ` VFRSH HPDLO

SULYDWH VWDWLF VWULQJ*HW$FFHVV7RNHQ8UL KWWSV JUDSK IDFHERRN FRP RDXWK DFFHVVBWRNHQ" FOLHQWBLG ^ ` UHGLUHFWBXUL ^ ` FOLHQWBVHFUHW ^ ` FRGH ^ `

SULYDWH VWDWLF VWULQJ*HW8VHU,QIR8UL KWWSV JUDSK IDFHERRN FRP PH"DFFHVVBWRNHQ ^ `

SULYDWH VWDWLF VWULQJ*UDSK8UL KWWSV JUDSK IDFHERRN FRP ^ `

SXEOLF,)E$SS&RQILJ &RQILJ ^JHW VHW`

SXEOLF VWULQJ $FFHVV7RNHQ ^JHW VHW`

SXEOLF VWULQJ $XWKRUL]H VWULQJUHGLUHFW7R

^

UHWXUQ VWULQJ)RUPDW$XWKRUL]H8UL &RQILJ$SS,' UHGLUHFW7R

`

SXEOLF ERRO *HW$FFHVV7RNHQ VWULQJFRGHVWULQJUHGLUHFW7R

^

YDUUHTXHVW VWULQJ)RUPDW *HW$FFHVV7RNHQ8UL &RQILJ$SS,' UHGLUHFW7R &RQILJ$SS6H FUHW FRGH

:HE&OLHQW ZHE&OLHQW QHZ:HE&OLHQW

VWULQJUHVSRQVH ZHE&OLHQW 'RZQORDG6WULQJ UHTXHVW

WU\

^

YDUSDLU5HVSRQVH UHVSRQVH 6SOLW

$FFHVV7RNHQ SDLU5HVSRQVH> @ 6SOLW > @

UHWXUQ WUXH

`

FDWFK([FHSWLRQ H[

^

UHWXUQ IDOVH

`

`

SXEOLF -2EMHFW*HW8VHU,QIR

^

YDUUHTXHVW VWULQJ)RUPDW *HW8VHU,QIR8UL$FFHVV7RNHQ

:HE&OLHQW ZHE&OLHQW QHZ:HE&OLHQW

VWULQJUHVSRQVH ZHE&OLHQW 'RZQORDG6WULQJ UHTXHVW

UHWXUQ -2EMHFW 3DUVH UHVSRQVH

`

`

Где

Authorize – это формирование ссылки для запроса прав. GetAccessToken – это запрос по получению временного токена. GetUserInfo – это запрос по получению данных пользователя.

Обратите внимание, как мы используем :HE&OLHQW 'RZQORDG6WULQJ – и оп­па, мы получили нужные данные из недр интернета.

Едем дальше. Создадим контроллер FacebookController (/Areas/Default/Controllers/FacebookController.cs):

SXEOLF FODVV )DFHERRN&RQWUROOHU 'HIDXOW&RQWUROOHU

^

SULYDWH)E3URYLGHU IE3URYLGHU

SURWHFWHG RYHUULGH YRLG ,QLWLDOL]H6\VWHP :HE 5RXWLQJ 5HTXHVW&RQWH[W UHTXHVW&RQWH[W

^

IE3URYLGHU QHZ)E3URYLGHU

IE3URYLGHU &RQILJ &RQILJ )DFHERRN6HWWLQJ

EDVH,QLWLDOL]H UHTXHVW&RQWH[W

`

SXEOLF $FWLRQ5HVXOW,QGH[

^

UHWXUQ5HGLUHFW IE3URYLGHU$XWKRUL]HKWWS+RVW1DPH)DFHERRN 7RNHQ

`

SXEOLF $FWLRQ5HVXOW7RNHQ

^

LI5HTXHVW 3DUDPV$OO.H\V &RQWDLQVFRGH

^

YDUFRGH 5HTXHVW 3DUDPV>FRGH@

LIIE3URYLGHU *HW$FFHVV7RNHQ FRGHKWWS+RVW1DPH)DFHERRN 7RNHQ

^

YDUM2EM IE3URYLGHU *HW8VHU,QIR

YDUIE8VHU,QIR -VRQ&RQYHUW 'HVHULDOL]H2EMHFW )E8VHU,QIR! M2EM 7R6WULQJ

UHWXUQ9LHZ IE8VHU,QIR

`

`

UHWXUQ9LHZ&DQW,QLWLDOL]H

`

`

В Initialize передаем в )E3URYLGHU $SS,'и $SS6HFUHW. После захода – делаем редирект на facebook с запросом прав у пользователя (окошко разрешения). Если пользователь уже нам это когда­то разрешил, чтобы не спрашивать по 100 раз, facebook нас переправит на страницу /Facebook/Token. Если код для получения токена не удалось получить – возвращаем View CantInitialize (/Areas/Default/Views/Facebook/CantInitialize.cshtml):

#^

9LHZ%DJ 7LWOH &DQW,QLWLDOL]H

/D\RXW a$UHDV 'HIDXOW 9LHZV 6KDUHG B/D\RXW FVKWPO

`

K!&DQW,QLWLDOL]HK!

K! ɇɭ ɧɟɬ ɬɚɤ ɧɟɬK!

Иначе, когда всё хорошо, то получаем наш токен (он сохраняется в fbProvider) и запрашиваем данные о пользователе. Получив – преобразовываем в объект класса FbUserInfo и выводим во

View (/Areas/Default/Views/Facebook/Token.cshtml):

#PRGHO /HVVRQ3URMHFW )DFHERRN$3, )E8VHU,QIR

#^

9LHZ%DJ 7LWOH 7RNHQ

/D\RXW a$UHDV 'HIDXOW 9LHZV 6KDUHG B/D\RXW FVKWPO

`

K!ȾɚɧɧɵɟK!S! ȼɨɬ ɱɬɨ ɹ ɩɪɨ ɬɟɛɹ ɡɧɚɸS!

GO FODVV GO KRUL]RQWDO!

GW!,'GW!

GG!#0RGHO ,GGG!

GW!)LUVW1DPHGW!

GG!#0RGHO )LUVW1DPHGG!

GW!/DVW1DPHGW!

GG!#0RGHO /DVW1DPHGG!

GW!/LQNGW!

GG!#0RGHO /LQNGG!

GO!

Клиентский код/Серверный код (Access­Control­Allow­Origin)

Рассмотрим еще ситуацию, когда всё это взаимодействие заключено в js­файлах, мы выполняем только ajax­запросы. Изменим код метода Token. Получаем данные пользователя не серверным кодом от facebook, а передаем во View токен

(/Areas/Default/Controllers/FacebookController.cs:Token):

SXEOLF $FWLRQ5HVXOW7RNHQ

^

LI5HTXHVW 3DUDPV$OO.H\V &RQWDLQVFRGH

^

YDUFRGH 5HTXHVW 3DUDPV>FRGH@

LIIE3URYLGHU *HW$FFHVV7RNHQ FRGHKWWS+RVW1DPH)DFHERRN 7RNHQ

^

YDU M2EM IE3URYLGHU *HW8VHU,QIR

YDU IE8VHU,QIR -VRQ&RQYHUW 'HVHULDOL]H2EMHFW )E8VHU,QIR! M2EM 7R6WULQJ

9LHZ%DJ 7RNHQ IE3URYLGHU$FFHVV7RNHQ

UHWXUQ9LHZ

`

`

UHWXUQ9LHZ&DQW,QLWLDOL]H

`

Изменим Token.cshtml (/Areas/Default/Views/Facebook/Token.cshtml):

#^

9LHZ%DJ 7LWOH 7RNHQ

/D\RXW a$UHDV 'HIDXOW 9LHZV 6KDUHG B/D\RXW FVKWPO

`

#VHFWLRQ VFULSWV ^

#6FULSWV 5HQGHU a 6FULSWV GHIDXOW IDFHERRN WRNHQ MV

`

#+WPO +LGGHQ 7RNHQ 9LHZ%DJ 7RNHQ DV VWULQJK!ȾɚɧɧɵɟK!S! ȼɨɬ ɱɬɨ ɹ ɩɪɨ ɬɟɛɹ ɡɧɚɸS!

GO FODVV GO KRUL]RQWDO!

GW!,'GW!

GG LG ,'!GG!

GW!)LUVW1DPHGW!

GG LG )LUVW1DPH!GG!

GW!/DVW1DPHGW!

GG LG /DVW1DPH!GG!

GW!/LQNGW!

GG LG /LQN!GG!GO!

Добавляем facebook­token.js (/Scripts/default/facebook­token.js):

IXQFWLRQ )DFHERRN7RNHQ^

BWKLV WKLV

WKLVDMD[*HW8VHU,QIR KWWSV JUDSK IDFHERRN FRP PH"DFFHVVBWRNHQ

WKLVLQLW IXQFWLRQ^

YDUWRNHQ 7RNHQYDO

DMD[ ^

W\SH*(7

GDWD7\SHMVRQ

XUO BWKLV DMD[*HW8VHU,QIR WRNHQ

VXFFHVVIXQFWLRQGDWD

^

,'WH[W GDWD LG

)LUVW1DPHWH[W GDWD ILUVWBQDPH

/DVW1DPHWH[W GDWD ODVWBQDPH

/LQNWH[W GDWD OLQN

`

`

`

`

YDUIDFHERRN7RNHQ QXOO

UHDG\IXQFWLRQ^

IDFHERRN7RNHQ QHZ)DFHERRN7RNHQ

IDFHERRN7RNHQ LQLW

`

Запускаем, проверяем. Всё отлично. Но обратим внимание на такой параметр в http­ответе:

Access­control­allow­origin – это параметр, который, будучи установлен, позволяет делать ajax­ запросы из браузера к сайту, размещенному на другом домене.

Т.е. если мы обращаемся по $.ajax() из браузера и в ответе этого заголовка нет, то выдается ошибка:

2ULJLQ KWWS ORFDOKRVW LV QRW DOORZHG E\$FFHVV &RQWURO$OORZ 2ULJLQ

Для этого создадим атрибут, который будет добавлять этот заголовок, если мы захотим организовать обращение к нашему сайту с других сайтов (/Attribute/AllowCrossSiteJson.cs):

SXEOLF FODVV $OORZ&URVV6LWH-VRQ$WWULEXWH $FWLRQ)LOWHU$WWULEXWH

^

SXEOLF RYHUULGH YRLG 2Q$FWLRQ([HFXWLQJ $FWLRQ([HFXWLQJ&RQWH[W ILOWHU&RQWH[W

^

ILOWHU&RQWH[W 5HTXHVW&RQWH[W +WWS&RQWH[W 5HVSRQVH$GG+HDGHU $FFHVV &RQWURO$OORZ 2UL JLQ

EDVH2Q$FWLRQ([HFXWLQJ ILOWHU&RQWH[W

`

`

Добавим использование. Напимер, метод­action OK, который всегда будет возвращать { “result”: “OK”} (/Areas/Default/Controllers/HomeController.cs):

>$OORZ&URVV6LWH-VRQ@

SXEOLF $FWLRQ5HVXOW2.

^

UHWXUQ -VRQQHZ^ UHVXOW 2.`-VRQ5HTXHVW%HKDYLRU$OORZ*HW

`

На этом всё по Json и работе с facebook. Можете потренироваться и поработать с авторизацией и взаимодействием с vk api. Документация тут:http://vk.com/developers.php.

Все исходники находятся по адресу https://bitbucket.org/chernikov/lessons

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