Кто-нибудь пытался создать строго типизированный API для асинхронных действий ASP.NET MVC 2?
С уважением, Алексей Захаров
Кто-нибудь пытался создать строго типизированный API для асинхронных действий ASP.NET MVC 2?
С уважением, Алексей Захаров
Если я правильно вас понял, я считаю, что мы недавно сделали что-то подобное. Мы использовали JsonValueProviderFactory из библиотеки ASP.NET MVC 2 Futures для достижения строго типизированного действия (подробнее об этом на haaked.com).
Для асинхронного действия у нас есть что-то похожее на это:
[HandleError]
public class HomeController : AsyncController
{
[HttpPost]
public void IndexAsync(Person person)
{
DoSomething();
}
public ActionResult IndexCompleted()
{
return View();
}
}
public class Person
{
public string Forename { get; set; }
public string Surname { get; set; }
}
и просто сделайте POST для действия с помощью:
{"Forename": "Cheesy", "Surname": "Goat"}
Есть отличный плагин для Firefox, который поможет в тестировании этого «клиента REST», который я бы тоже порекомендовал.
Надеюсь это поможет.
MVC вполне мог бы это сделать, но я понимаю из предоставленного вами образца кода, что вам нужен API на основе json.
Microsoft создала WebAPI именно для этой ситуации, он строго типизирован и следует шаблону MVC в своем базовом дизайне, но он также хорошо работает и может использоваться вместе с MVC в одном и том же веб-приложении.
Тем не мение:
Если вы хотите, вы можете предоставить сериализованные объекты из действия контроллера MVC, используя простой пакет сериализатора Json и просто возвращая результирующую строку, ActionResult также поддерживает этот сценарий, а для сообщений используйте встроенную инфраструктуру метаданных для проверки данных конкретного типа из пост, дающий вам желаемый тип безопасности.
Также возможно обращение с контроллером MVC как с конечной точкой отдыха, это просто вопрос создания контроллера, который будет поддерживать типичные вызовы REST.
Однако я настоятельно рекомендую использовать для этого WebAPI, поскольку он лучше подходит для сценариев API.