asp.net-mvc - pages - razor views asp net core




ASP.NET MVC 4 Application Calling Remote WebAPI (4)

В прошлом я создал несколько приложений ASP.NET MVC, но раньше я никогда не использовал WebAPI. Мне интересно, как я могу создать простое приложение MVC 4, которое делает простой материал CRUD через WebAPI вместо обычного контроллера MVC. Фокус в том, что WebAPI должен быть отдельным решением (и, на самом деле, вполне может быть на другом сервере / домене).

Как мне это сделать? Что мне не хватает? Это просто вопрос настройки маршрутов для указания на сервер WebAPI? Все примеры, которые я нашел, показывающие, как использовать WebAPI с использованием приложения MVC, похоже, предполагают, что WebAPI «испечен» в приложении MVC или, по крайней мере, находится на одном сервере.

О, и для уточнения, я не говорю о вызовах Ajax с использованием jQuery ... Я имею в виду, что контроллер MVC-приложения должен использовать WebAPI для получения / размещения данных.


В этом случае вы можете использовать HttpClient для использования Web API с вашего контроллера.


Вы должны использовать новый HttpClient для использования ваших HTTP-API. Что я могу дополнительно посоветовать вам сделать ваши звонки полностью асинхронными. Поскольку действия контроллера ASP.NET MVC поддерживают модель асинхронного программирования на основе задач, она довольно эффективна и проста.

Ниже приведен упрощенный пример. Следующий код является вспомогательным классом для запроса образца:

public class CarRESTService {

    readonly string uri = "http://localhost:2236/api/cars";

    public async Task<List<Car>> GetCarsAsync() {

        using (HttpClient httpClient = new HttpClient()) {

            return JsonConvert.DeserializeObject<List<Car>>(
                await httpClient.GetStringAsync(uri)    
            );
        }
    }
}

Затем я могу использовать это через мой MVC-контроллер асинхронно, как показано ниже:

public class HomeController : Controller {

    private CarRESTService service = new CarRESTService();

    public async Task<ActionResult> Index() {

        return View("index",
            await service.GetCarsAsync()
        );
    }
}

Вы можете посмотреть нижеприведенную запись, чтобы увидеть эффекты асинхронных операций ввода-вывода с ASP.NET MVC:

Мой подход к асинхронному программированию на основе задач на C # 5.0 и веб-приложениях ASP.NET MVC


Спасибо всем за ответы. Думаю, @tugberk привел меня по правильному пути. Это сработало для меня ...

Для моего помощника CarsRESTService:

public class CarsRESTService
{
    readonly string baseUri = "http://localhost:9661/api/cars/";

    public List<Car> GetCars()
    {
        string uri = baseUri;
        using (HttpClient httpClient = new HttpClient())
        {
            Task<String> response = httpClient.GetStringAsync(uri);
            return JsonConvert.DeserializeObjectAsync<List<Car>>(response.Result).Result;
        }
    }

    public Car GetCarById(int id)
    {
        string uri = baseUri + id;
        using (HttpClient httpClient = new HttpClient())
        {
            Task<String> response = httpClient.GetStringAsync(uri);
            return JsonConvert.DeserializeObjectAsync<Car>(response.Result).Result;
        }
    }
}

А затем для CarsController.cs:

public class CarsController : Controller
{
    private CarsRESTService carsService = new CarsRESTService();

    //
    // GET: /Cars/

    public ActionResult Index()
    {
        return View(carsService.GetCars());
    }

    //
    // GET: /Cars/Details/5

    public ActionResult Details(int id = 0)
    {
        Car car = carsService.GetCarById(id);

        if (car == null)
        {
            return HttpNotFound();
        }
        return View(car);
    }
}

http://restsharp.org/ - ответ на ваши вопросы. В настоящее время я использую его в приложении, которое имеет аналогичную структуру.

Но в более общем плане использование WebAPI - это просто публикация и запрос данных о том, как обрабатывать зависит от вас. Вы даже можете использовать стандартные WebRequest и JavascriptSerializer.

Приветствия.







asp.net-web-api