#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) { ... }