В этой статье мы рассмотрим вызовы REST API в .NET Core,

1) Получить список ресурсов

Для создания методов REST API мы создаем контроллер, производный от класса ControllerBase.

Здесь, когда вы работаете с проектом веб-API, наследуйте свой класс контроллера только от ControllerBase, а не от контроллера, поскольку контроллер добавляет поддержку для объекта представления. Класс So, производный от контроллера при работе с веб-приложением MVC.

Давайте посмотрим на пример получения списка продуктов,

ProductController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EmployeeManagement.API.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace EmployeeManagement.API.Controllers
{
[Route(“api/[controller]”)]
[ApiController]
public class ProductController : ControllerBase
{
private readonly IProductRepository productRepository;
public ProductController(IProductRepository productRepository)
{
this.productRepository = productRepository;
}
[HttpGet]
Public async Task<ActionResult> GetProducts()
{
return Ok(await productRepository.GetProducts());
}
}
}

Как вы видели здесь, мы внедрили созданный репозиторий в наш класс контроллера для получения необходимых данных, здесь мы определили метод, который будет возвращать список продуктов со статусом ok с кодом статуса 200.

Некоторые из распространенных кодов состояния HTTP, перечисленных ниже,

Level 200
200- OK
201 –Created
204- No content
Level 400
400 — Bad request
401 –Unauthorized
404 — Not Found
Level 500
500 — Internal Server Error
501 — Not implemented
503 –Service unavailable

2) Получить ресурс с идентификатором

Как мы видели ранее, мы получаем список продуктов с конечной точкой api / product, поэтому, если мы хотим получить продукт с идентификатором, конечной точкой будет api / product / {id}

Давайте посмотрим, например, на код ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EmployeeManagement.API.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace EmployeeManagement.API.Controllers
{
[Route(“api/[controller]”)]
[ApiController]
public class ProductController : ControllerBase
{
private readonly IProductRepository productRepository;
public ProductController(IProductRepository productRepository)
{
this.productRepository = productRepository;
}
[HttpGet]
public async Task<ActionResult> GetProducts()
{
return Ok(await productRepository.GetProducts());
}
[HttpGet(“id:int”)]
public async Task<ActionResult<Product>> GetProduct(int id)
{
try
{
var result = await productRepository.GetProduct(id);
if (result == null)
{
return NotFound();
}
return result;
}
catch (Exception)
{
return StatusCode(StatusCodes.Status500InternalServerError, “Error retrieving data from datatbase”);
}
}
}
}

Как вы заметили, мы украсили этот метод HTTPGet и расширили маршрут параметром id, чтобы он получал только запрашиваемый, а также добавили ограничение HTTP, чтобы этот параметр имел целочисленный тип.

3) POST в REST API, чтобы добавить продукт

Для почтового запроса мы передаем объект продукта в конечную точку. Чтобы привязка вашей модели работала, нам нужно объявить наш контроллер как APIController или сделать параметр вашего метода атрибутом FromBody. Если вы не следуете, то привязка модели не будет работать. Давайте проверим пример ниже,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EmployeeManagement.API.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace EmployeeManagement.API.Controllers
{
[Route(“api/[controller]”)]
[ApiController]
public class ProductController : ControllerBase
{
private readonly IProductRepository productRepository;
public ProductController(IProductRepository productRepository)
{
this.productRepository = productRepository;
}
[HttpGet]
public async Task<ActionResult> GetProducts()
{
return Ok(await productRepository.GetProducts());
}
[HttpGet(“{id:int}”)]
public async Task<ActionResult<Product>> GetProduct(int id)
{
try
{
var result = await productRepository.GetProduct(id);
if (result == null)
{
return NotFound();
}
return result;
}
catch (Exception)
{
return StatusCode(StatusCodes.Status500InternalServerError, “Error retrieving data from datatbase”);
}
}
public async Task<ActionResult<Product>> CreateProduct(Product product)
{
try
{
if (product == null)
{
return BadRequest();
}
var result = await productRepository.AddProduct(product);
return CreatedAtAction(nameof(GetProduct),new { id=result.productId},result);
}
catch(Exception)
{
return StatusCode(StatusCodes.Status500InternalServerError, “Bad Request”);
}
}
}
}

Как вы видите в этом примере, мы использовали метод CreateAtAction для возврата созданного объекта, его кода состояния и URI местоположения, в котором был создан созданный объект, в заголовке ответа, пожалуйста, проверьте ответ, показанный ниже,

4) Проверка модели в .NET Core Rest API

Обязательный атрибут - этот атрибут указывает, что поле является обязательным.

Атрибут диапазона - указывает минимальное и максимальное допустимое значение.

Атрибут MinLength и MaxLength: указывает минимальную и максимальную длину строки.

Атрибут сравнения - сравнение двух свойств модели (пароль и подтверждение пароля).

Регулярное выражение - убедитесь, что значение соответствует шаблону, указанному RE.

5) ПОСТАВИТЬ в REST API

Мы увидим, как мы можем обновить существующие ресурсы с помощью запросов на размещение. Возьмем пример обновления продукта,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EmployeeManagement.API.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace EmployeeManagement.API.Controllers
{
[Route(“api/[controller]”)]
[ApiController]
public class ProductController : ControllerBase
{
private readonly IProductRepository productRepository;
public ProductController(IProductRepository productRepository)
{
this.productRepository = productRepository;
}
[HttpGet]
public async Task<ActionResult> GetProducts()
{
return Ok(await productRepository.GetProducts());
}
[HttpGet(“{id:int}”)]
public async Task<ActionResult<Product>> GetProduct(int id)
{
try
{
var result = await productRepository.GetProduct(id);
if (result == null)
{
return NotFound();
}
return result;
}
catch (Exception)
{
return StatusCode(StatusCodes.Status500InternalServerError, “Error retrieving data from datatbase”);
}
}
[HttpPut(“{id:int}”)]
public async Task<ActionResult<Product>> UpdateProduct(int id,Product product)
{
try
{
if(id!=product.productId)
{
return BadRequest(“Product id mismatch”);
}
var producttoupdate = await productRepository.GetProduct(id);
if(producttoupdate == null)
{
return NotFound(“Product not found”);
}
var result = await productRepository.UpdateProduct(product);
return result;
}
catch(Exception)
{
return StatusCode(StatusCodes.Status500InternalServerError, “Bad Request”);
}
}
}
}

Результат:

6) УДАЛИТЬ в REST API

Давайте проверим пример удаления товара,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EmployeeManagement.API.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace EmployeeManagement.API.Controllers
{
[Route(“api/[controller]”)]
[ApiController]
public class ProductController : ControllerBase
{
private readonly IProductRepository productRepository;
public ProductController(IProductRepository productRepository)
{
this.productRepository = productRepository;
}
[HttpDelete(“{id:int}”)]
public void DeleteProduct(int id)
{
productRepository.DeleteProduct(id);
}
}
}

Результат:

Спасибо, увидимся в новой статье !!

Вы можете связаться со мной здесь,

LinkedIn: https://www.linkedin.com/in/vaibhav-bhapkar

Эл. Почта: [email protected]

Если вы хотите обсудить некоторые технические темы с группой участников, отправьте запрос по следующей ссылке: http://myblogsenquiry.somee.com/