(FR/EN) Используйте исключение HttpResponseException и запрос.Создать ответ в базе управления

#c# #backend #e-commerce #rider

Вопрос:

Мне нужна помощь для моего проекта, который состоит в создании веб-сайта электронной коммерции. В настоящее время я работаю над заказами, и когда я выполняю свой контроллер (OrdersController) Я не могу использовать «HttpResponseException» или «Запрос.Ответ создателя». Как я могу это сделать, чтобы иметь возможность их использовать? Это комментарии в:

  • Получить заказ: бросьте новый …
  • PostOrder: Сообщение HttpResponseMessage … // Ответ на возврат // Запрос на возврат.Создать…
 using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using ElevenCherryBackEnd.Entities; using ElevenCherryBackEnd.Helpers;  namespace ElevenCherryBackEnd.Controllers {  [Route("api/[controller]")]  [ApiController]  public class OrdersController : ControllerBase  {  private readonly OrdersContext _context;   public OrdersController(OrdersContext context)  {  _context = context;  }   // GET: api/Orders  [HttpGet]  public IEnumerablelt;Ordergt; GetOrders()  {  return _context.Orders.Where(o =gt; o.Customer == User.Identity.Name);  }   // GET: api/Orders/5  [HttpGet("{id}")]  public OrderDTO GetOrder(int id)  {  Order order = _context.Orders.Include("OrderDetails.Product")  .First(o =gt; o.Id == id amp;amp; o.Customer == User.Identity.Name);  if (order == null)  {  //throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));  return null;  }   return new OrderDTO()  {  Details = from d in order.OrderDetails  select new OrderDTO.Detail()  {  ProductID = d.Product.Id,  Product = d.Product.Name,  Price = d.Product.Price,  Quantity = d.Quantity  }  };  }   // POST: api/Orders  // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754  [HttpPost]  public async Tasklt;ActionResultlt;Ordergt;gt; PostOrder(OrderDTO dto)  {  if (ModelState.IsValid)  {  var order = new Order()  {  Customer = User.Identity.Name,  OrderDetails = (from item in dto.Details select new OrderDetail()   { ProductId = item.ProductID, Quantity = item.Quantity }).ToList()  };   _context.Orders.Add(order);  _context.SaveChanges();   //HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, order);  //return response;  return order;  }  //return Request.CreateResponse(HttpStatusCode.BadRequest);  return null;  }  } }   

Ответ №1:

Во-первых, вы не можете использовать HttpResponseException , потому что он был удален из ASP.NET Ядро. В классе есть специальный метод Controller , который генерирует ответы на код ошибки — StatusCode(int statusCode) например, для возврата 400 Bad Request кода:

 return StatusCode(StatusCodes.Status400BadRequest);  

Существуют также дополнительные методы для возврата общих кодов состояния. например, 400 Bad Request код также может быть возвращен таким образом:

 return BadRequest();  

Чтобы иметь возможность возвращать эти результаты кода, а также объекты, используйте IActionResult в качестве типа возврата в сигнатуре метода:

 [HttpGet("{id}")] public IActionResult GetOrder(int id) { ... }  [HttpPost] public async Tasklt;IActionResultgt; PostOrder(OrderDTO dto) { ... }