Главная страница   /   24.3. Альтернатива Web API (ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

24.3. Альтернатива Web API

Если на данный момент вы уже некоторое время пользовались ASP.NET MVC, то вы, возможно, уже использовали регулярный контроллер, который служил бы конечной точкой простой веб-службы. Если вы использовали версию ASP.NET MVC (v1-v3), в которую не входил Web API, то рассмотрим следующий прием, который будет в будущем создавать простой путь обновления для API контроллера.

В следующем листинге вы можете увидеть регулярный ASP.NET MVC контроллер, который используется для тех же целей, что и GuestbookEntryController (из листинга 24-3).

Листинг 24-5: MVC контроллер, который использует приемы, схожие с Web API
using System.Linq;
using System.Web.Mvc;
using GuestBook.Models;
using Guestbook.Models;
namespace GuestBook.Controllers
{
	public class GuestbookEntryMvcController : Controller
	{
		private IGuestbookRepository _repository;
		public GuestbookEntryMvcController()
		{
			_repository = new GuestbookRepository();
		}
		public GuestbookEntryMvcController(IGuestbookRepository repository)
		{
			_repository = repository;
		}
		public JsonResult Index()
		{
			var mostRecentEntries = _repository.GetMostRecentEntries();
			return Json(mostRecentEntries);
		}
		public JsonResult Show(int id)
		{
			var entry = _repository.FindById(id);
			if (entry == null)
			{
				Response.Clear();
				Response.StatusCode = 404;
				Response.End();
			}
			return Json(entry);
		}
		[HttpPost]
		public ActionResult Create(GuestbookEntry value)
		{
			if (!ModelState.IsValid)
			{
				var errors =
				(from state in ModelState
					where state.Value.Errors.Any()
					select new
					{
						state.Key,
						Errors = state.Value.Errors.Select(
						error => error.ErrorMessage)
					})
				.ToDictionary(error => error.Key,
				error => error.Errors);
				return Json(errors);
			}
			_repository.AddEntry(value);
			Response.StatusCode = 200;
			Response.End();
			return new EmptyResult();
		}
	}
}

Строка 7: Наследуется от MVC контроллера

Строка 18: Использует GET перечисление

Строка 23: Возвращает JSON данные для единичной записи

Строка 35: Публикация новой записи с помощью POST

Этот контроллер не использует возможности Web API, поэтому если вы работаете с ранней версией ASP.NET MVC, то вы можете использовать этот прием, чтобы удостовериться в ранней совместимости с апгрейдером. Этот контроллер наследуется от System.Web.Mvc.Controller. Действие GET для перечисления многочисленных записей возвращает JSON, как это делает действие Show для единичных записей. Действие POST завершает контроллер, добавляя возможность публиковать новые записи.

И снова этот контроллер использует те же приемы, что и Web API контроллер, но он построен при помощи использования подхода обычного ASP.NET MVC контроллера. Если вы используете предыдущую версию ASP.NET MVC, то рассмотрите использование этого подхода как способ облегчения вашего перехода на Web API в будущем.