Одностраничные веб-приложения (SPA) с библиотекой KnockoutJS

| Суббота, 9 марта, 2013

Метки: ASP.NET MVC, ASP.NET Web API, Entity Framework, Knockout Комментарии: 0

Контроллеры ASP.NET Web API

В ASP.NET Web API контроллеры обрабатывают HTTP-запросы. В одностраничном шаблоне Web API применяется для CRUD-операций (create read update delete — «Создание чтение обновление удаление») со списками ToDoList и ToDoItem. В проекте контроллеры находятся в папке Controllers.

  • TodoController: Обрабатывает HTTP-запросы для to-do элементов
  • TodoListController: Обрабатывает HTTP-запросы для to-do списков.

Рассмотрим класс ToDoListController. Он содержит один элемент данных:

private TodoItemContext db = new TodoItemContext();

ToDoItemContext используется для взаимодействия с Entity Framework, об этом рассказано ранее. Методы контроллера реализуют CRUD-операции. Web API маршрутизирует HTTP-запросы от клиента в соответствующие методы, согласно таблице:

HTTP-запросМетод контроллераОписание
GET /api/todoGetTodoListsПолучить коллекцию списков to-do.
GET /api/todo/idGetTodoListПолучить список to-do по ID.
PUT /api/todo/idPutTodoListОбновить список to-do.
POST /api/todoPostTodoListСоздать новый to-do-список.
DELETE /api/todo/idDeleteTodoListУдалить to-do-список.

Заметим, что в некоторых URI есть значения ID. Например, это нужно для удаления списка по ID.

Код контроллера ToDoListController имеет некоторые интересные моменты:

  • Метод GetToDoLists использует LINQ-запрос для фильтрации результатов по ID залогиненного пользователя. Таким образом пользователь видит только свои списки. И еще оператор Select конвертирует объекты ToDoList в объекты ToDoListDto.
  • Методы PUT и POST проверяют состояние модели прежде чем вносить изменения в базу данных. Если Model.IsValid равно false, то метод возвращает ответ HTTP 400, Bad Request.
  • У класса контроллера установлен атрибут [Authorize]. Этот атрибут пропускает только авторизованные запросы от залогиненного пользователя, в противном случае клиент получит HTTP 401, Unauthorized. Подробнее об этом можно прочитать в статье Аутентификация и авторизация в ASP.NET Web API.

Класс TodoController очень похож на TodoListController. Основное отличие в том, что он не реализует GET-методы, потому что клиент получает элементы to-do, через списки to-do.

MVC Контроллеры и представления

Контроллеры MVC тоже расположены в папке Controllers. HomeController генерирует главную страницу приложения. Представление для этого контроллера находится в Views/Home/Index.cshtml. Это представление отображает разное содержимое, в зависимости залогинен пользователь или нет.

@if (@User.Identity.IsAuthenticated)
{
    // ....
}

Если пользователь авторизован – он увидит главную страницу приложения для управления списками. С противном случае ему будет предоставлена форма для ввода логина и пароля. Причем выбор содержимого страницы осуществляется на стороне сервера. Никогда не пытайтесь скрывать контент страницы на стороне клиента – все что будет отослано ответе HTTP, можно увидеть в HTTP сообщениях.

Комментарии
Никто еще не оставил здесь комментарий.
Войдите, чтобы написать комментарий , или воспользуйтесь формой ниже.
 

Copyright © CodeHint.ru 2013-2020