Строго типизированный API для асинхронных действий ASP.NET MVC 2 - PullRequest
2 голосов
/ 17 мая 2010

Кто-нибудь пытался создать строго типизированный API для асинхронных действий ASP.NET MVC 2?

С уважением, Алексей Захаров

Ответы [ 2 ]

0 голосов
/ 20 июля 2011

Я думаю, что мы недавно сделали что-то подобное, если я правильно вас понял. Мы использовали 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-клиент, который я бы тоже порекомендовал.

Надеюсь, это поможет.

0 голосов
/ 17 мая 2010

MVC вполне может это сделать, но, насколько я понимаю, из предоставленного вами примера кода вам нужен API на основе json.

Microsoft создала WebAPI именно для этой ситуации, она строго типизирована и соответствует шаблону MVC в своей базовой структуре, но она также хорошо работает и может использоваться вместе с MVC в одном и том же веб-приложении.

Тем не менее:

Если вы хотите, чтобы вы могли предоставлять сериализованные объекты из действия контроллера MVC, используя простой пакет Json serialiser и просто возвращая полученную строку, ActionResult также поддерживает этот сценарий, а для сообщений используйте встроенную инфраструктуру метаданных для проверки вашего конкретного типа Данные из поста дают вам желаемый тип безопасности.

Обработка контроллера MVC как конечной точки покоя также возможна, просто нужно правильно настроить контроллер для поддержки типичных вызовов REST.

Однако я настоятельно рекомендую использовать для этого WebAPI, поскольку он лучше подходит для сценариев API.

...