ASP.NET MVC Урок 1-F / ASP.NET MVC Урок 8
.pdfILOWHU&RQWH[W 5HVXOW 5HGLUHFW (UURU3DJH
`
Теперь можно использовать свойства RedirectToNotFoundPage и RedirectToLoginPage UserController (/Areas/Default/Controllers/UserController.cs) так:
>$XWKRUL]H@
SXEOLF $FWLRQ5HVXOW(GLW LQWLG
^
YDUXVHU 5HSRVLWRU\ 8VHUV )LUVW2U'HIDXOW S ! S ,' LG
LIXVHU QXOO
^
LI&XUUHQW8VHU ,Q5ROHVDGPLQ __&XUUHQW8VHU ,' LG
^
Ɋɚɡɪɟɲɟɧɨ ɪɟɞɚɤɬɢɪɨɜɚɧɢɟ
UHWXUQ9LHZ XVHU
`
UHWXUQ5HGLUHFW7R/RJLQ3DJH
`
UHWXUQ5HGLUHFW7R1RW)RXQG3DJH
`
Обратите внимание, изначально необходимо быть авторизованным в системе, но редактирование разрешено только самому пользователю, котого эти данные или пользователю с правами админа. Добавим обработку ошибки и 404страницу. Создадим контроллер, но не будем его наследовать от %DVH&RQWUROOHU, чтобы ненароком не зацепить еще какуюнибудь ошибку. Добавим пути маршрутов в обработку (/Areas/Default/DefaultAreaRegistration.cs):
FRQWH[W 0DS5RXWH
QXOO
XUO(UURU
GHIDXOWVQHZ^ FRQWUROOHU (UURUDFWLRQ ,QGH[LG 8UO3DUDPHWHU 2SWLRQD O `
QDPHVSDFHVQHZ>@ ^/HVVRQ3URMHFW$UHDV 'HIDXOW &RQWUROOHUV`
FRQWH[W 0DS5RXWH
QXOO
XUO1RW)RXQG3DJH
GHIDXOWVQHZ^ FRQWUROOHU (UURUDFWLRQ 1RW)RXQG3DJHLG 8UO3DUDPHWH U 2SWLRQDO `
QDPHVSDFHVQHZ>@ ^/HVVRQ3URMHFW$UHDV 'HIDXOW &RQWUROOHUV`
Контроллер (/Areas/Default/Controllers/ErrorController.cs):
SXEOLF FODVV (UURU&RQWUROOHU &RQWUROOHU
^
SXEOLF $FWLRQ5HVXOW,QGH[
^
5HVSRQVH 6WDWXV&RGH LQW+WWS6WDWXV&RGH ,QWHUQDO6HUYHU(UURU
UHWXUQ9LHZ
`
SXEOLF $FWLRQ5HVXOW1RW)RXQG3DJH
^
5HVSRQVH 6WDWXV&RGH LQW+WWS6WDWXV&RGH 1RW)RXQG
UHWXUQ9LHZ
`
`
Добавляем простейшую страницу ошибки View (/Areas/Default/Views/Error/Index.cshtml):
#^
/D\RXW QXOO
`
'2&7<3( KWPO!
KWPO!
KHDG!
PHWD QDPH YLHZSRUW FRQWHQW ZLGWK GHYLFH ZLGWK!
WLWOH!,QGH[WLWOH!KHDG!
ERG\!
GLY!
ɈɲɢɛɤɚEU!
D KUHI !ȼɟɪɧɭɬɶɫɹ ɧɚ ɝɥɚɜɧɭɸD!
GLY!ERG\!KWPO!
Аналогичная страница 404 (/Areas/Default/Views/Error/NotFoundPage.cshtml).
Другие ActionResult
ActionResult не обязательно может возвращать View. Рассмотрим другие примеры:
Content(result) – возвращает простой текст в httpответе
JsonResult(object) – возвращает объект в формате json (далее рассмотрим)
FileContentResult() – возвращает ресурс для скачивания Отправляет в ответ содержимое файла. (источник — мсдн)
FilePathResult() – возвращает файл, расположенный по указанному пути
FileStreamResult() – возвращает в файле записанный поток
RedirectResult() – переправляет на указанную страницу RedirectToRouteResult() – переправляет на страницу по новому указанному пути
RssActionResult
RSS – это XML формат, предназначенный для описания лент новостей, статей, блогов. У нас пока нет постов, так что мы просто создадим RssActionResult. В6\VWHP 6HUYLFH0RGHO 6\QGLFDWLRQ – это набор инструментов для работы с RSS. Нам необходимы SyndicationFeed и SyndicationItem. Подключим System.ServiceModel в reference, создадим новый контроллер
(/Areas/Default/Controllers/FeedController.cs):
SXEOLF FODVV )HHG&RQWUROOHU 'HIDXOW&RQWUROOHU
^
SXEOLF $FWLRQ5HVXOW,QGH[
^
YDUKRVW 5HTXHVW 8UO
YDUIHHG
QHZ6\QGLFDWLRQ)HHG6LWH 566
QHZ8UL KRVW$EVROXWH8UL)HHG
YDULWHPV QHZ/LVW 6\QGLFDWLRQ,WHP!
YDULWHP QHZ6\QGLFDWLRQ,WHP
7LWOH
FRQWHQW
QHZ8ULKWWSKRVWVRPH OLQN XUO
7LWOH
'DWH7LPH 1RZ
LWHPV$GG LWHP
IHHG ,WHPV LWHPV
UHWXUQ9LHZ
`
`
Абсолютно тестовые данные, одно значение на нерабочую ссылку. Создадим RssActionResult (/Global/RssActionResult.cs):
SXEOLF FODVV 5VV$FWLRQ5HVXOW $FWLRQ5HVXOW
^
SXEOLF6\QGLFDWLRQ)HHG )HHG ^JHW VHW`
SXEOLF RYHUULGH YRLG ([HFXWH5HVXOW&RQWUROOHU&RQWH[W FRQWH[W
^
FRQWH[W +WWS&RQWH[W 5HVSRQVH &RQWHQW7\SH DSSOLFDWLRQ UVV [PO
YDUUVV)RUPDWWHU QHZ5VV )HHG)RUPDWWHU )HHG
XVLQJ YDUZULWHU ;PO:ULWHU &UHDWH FRQWH[W +WWS&RQWH[W 5HVSRQVH 2XWSXW
^
UVV)RUPDWWHU :ULWH7R ZULWHU
`
`
`
Основным параметром является Feed, куда передается уже сформированный Feed. Сам
ActionResult вызывает ExecuteResult(). Мы используем Rss20FeedFormatted для записи xml в Response.Output. Response.Output – это stream, куда записывая данные обрабатываются браузером как ответ. Для того чтобы браузер понимал, какой именно тип данных мы передаем,
мы присваиваем в 5HVSRQVH &RQWHQW7\SH ³DSSOLFDWLRQ UVV [PO´
Возвращаем наш RssActionResult (/Areas/Default/Controllers/FeedController.cs):
«
UHWXUQ QHZ5VV$FWLRQ5HVXOW ^)HHG IHHG `
Запускаем:
Если установить RSS Subscription Extension (by Google), то наш RSSканал отобразится в
браузере, и мы сможем на него подписаться.:
Можете попробовать реализовать Sitemap вывод. Вот протоколhttp://www.sitemaps.org/protocol.html, описывающий формат.
Все исходники находятся по адресу https://bitbucket.org/chernikov/lessons