В отношении заказа места, < /p>
Badrequest, выпуск «Размещение сообщения заказа», < /p>
using System.Linq;
using System.Security.Claims;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using Mango.Services.OrderAPI.Data;
using Mango.Services.OrderAPI.Models;
using Mango.Services.OrderAPI.Models.Dto;
using Mango.Services.OrderAPI.Utility;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
// Force mapping to the correct DTO namespace
using DtoOrderHeader = Mango.Services.OrderAPI.Models.Dto.OrderHeaderDto;
namespace Mango.Services.OrderAPI.Controllers
{
[Route("api/order")]
[ApiController]
public class OrderAPIController : ControllerBase
{
private readonly AppDbContext _db;
private readonly IMapper _mapper;
public OrderAPIController(AppDbContext db, IMapper mapper)
{
_db = db;
_mapper = mapper;
}
// Small helper: ensure GET responses aren't cached by browser/proxies
private void NoCache()
{
Response.Headers["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0";
Response.Headers["Pragma"] = "no-cache";
Response.Headers["Expires"] = "0";
}
// ADMIN: list all orders
[Authorize(Roles = SD.RoleAdmin)]
[HttpGet("GetAllOrders")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public async Task GetAllOrders()
{
NoCache();
var resp = new ResponseDto();
try
{
var dto = await _db.OrderHeaders
.AsNoTracking()
.OrderByDescending(o => o.OrderHeaderId)
.ProjectTo(_mapper.ConfigurationProvider)
.ToListAsync();
resp.Result = dto;
resp.IsSuccess = true;
}
catch (Exception ex)
{
resp.IsSuccess = false;
resp.Message = ex.GetBaseException().Message;
}
return resp;
}
// USER: list my orders (claims-based)
[Authorize]
[HttpGet("GetOrders")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public async Task GetOrders()
{
NoCache();
var response = new ResponseDto();
try
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrWhiteSpace(userId))
{
response.IsSuccess = false;
response.Message = "User not identified.";
return response;
}
var orderHeaders = await _db.OrderHeaders
.AsNoTracking()
.Where(u => u.UserId == userId)
.Include(o => o.OrderDetails)
.OrderByDescending(o => o.OrderHeaderId)
.ToListAsync();
response.Result = _mapper.Map(orderHeaders);
response.IsSuccess = true;
}
catch (AutoMapperMappingException amex)
{
response.IsSuccess = false;
response.Message = amex.InnerException?.Message ?? amex.Message;
}
catch (Exception ex)
{
response.IsSuccess = false;
response.Message = ex.Message;
}
return response;
}
// USER: create an order — returns created order + latest orders so UI can refresh instantly
[Authorize]
[HttpPost("CreateOrder")]
public async Task CreateOrder([FromBody] CartDto cartDto)
{
var response = new ResponseDto();
try
{
if (cartDto?.CartHeader == null || cartDto.CartDetails == null || !cartDto.CartDetails.Any())
{
response.IsSuccess = false;
response.Message = "Cart is empty or invalid.";
return response;
}
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrWhiteSpace(userId))
{
response.IsSuccess = false;
response.Message = "User not identified.";
return response;
}
// Map & persist new order
var orderHeaderDto = _mapper.Map(cartDto.CartHeader);
orderHeaderDto.UserId = userId; // ensure owner is set
orderHeaderDto.OrderTime = DateTime.UtcNow; // use UTC for consistency
orderHeaderDto.Status = SD.Status_Pending;
orderHeaderDto.OrderDetails = _mapper.Map(cartDto.CartDetails);
var orderEntity = _mapper.Map(orderHeaderDto);
await _db.OrderHeaders.AddAsync(orderEntity);
await _db.SaveChangesAsync();
// set generated id back on DTO
orderHeaderDto.OrderHeaderId = orderEntity.OrderHeaderId;
// fetch latest orders for this user so the client can immediately refresh its table
var latestOrders = await _db.OrderHeaders
.AsNoTracking()
.Where(o => o.UserId == userId)
.Include(o => o.OrderDetails)
.OrderByDescending(o => o.OrderHeaderId)
.ProjectTo(_mapper.ConfigurationProvider)
.ToListAsync();
response.Result = new
{
created = orderHeaderDto,
orders = latestOrders
};
response.IsSuccess = true;
}
catch (Exception ex)
{
response.IsSuccess = false;
response.Message = ex.Message;
}
return response;
}
// USER/ADMIN: get a single order (non-admin must own it)
[Authorize]
[HttpGet("GetOrder/{orderId:int}")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public async Task GetOrder(int orderId)
{
NoCache();
var response = new ResponseDto();
try
{
var orderHeader = await _db.OrderHeaders
.AsNoTracking()
.Include(o => o.OrderDetails)
.FirstOrDefaultAsync(o => o.OrderHeaderId == orderId);
if (orderHeader == null)
{
response.IsSuccess = false;
response.Message = "Order not found.";
return response;
}
var isAdmin = User.IsInRole(SD.RoleAdmin);
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (!isAdmin && !string.Equals(orderHeader.UserId, userId, StringComparison.Ordinal))
{
response.IsSuccess = false;
response.Message = "Forbidden.";
return response;
}
response.Result = _mapper.Map(orderHeader);
response.IsSuccess = true;
}
catch (AutoMapperMappingException amex)
{
response.IsSuccess = false;
response.Message = amex.InnerException?.Message ?? amex.Message;
}
catch (Exception ex)
{
response.IsSuccess = false;
response.Message = ex.Message;
}
return response;
}
}
}
< /code>
Любая справка, < /p>
ждать вашего ответа, < /p>
С уважением, < /p>
fabrice < /p>
Страница для загрузки, не так и для работы, не работает. Отладка orderapi
Любая справка,
Заранее благодарит вас,
fabrice
Подробнее здесь: https://stackoverflow.com/questions/797 ... ot-loading
Проект Mango для удаления ошибки для полосы, не загруженной ⇐ C#
Место общения программистов C#
-
Anonymous
1759576178
Anonymous
В отношении заказа места, < /p>
Badrequest, выпуск «Размещение сообщения заказа», < /p>
using System.Linq;
using System.Security.Claims;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using Mango.Services.OrderAPI.Data;
using Mango.Services.OrderAPI.Models;
using Mango.Services.OrderAPI.Models.Dto;
using Mango.Services.OrderAPI.Utility;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
// Force mapping to the correct DTO namespace
using DtoOrderHeader = Mango.Services.OrderAPI.Models.Dto.OrderHeaderDto;
namespace Mango.Services.OrderAPI.Controllers
{
[Route("api/order")]
[ApiController]
public class OrderAPIController : ControllerBase
{
private readonly AppDbContext _db;
private readonly IMapper _mapper;
public OrderAPIController(AppDbContext db, IMapper mapper)
{
_db = db;
_mapper = mapper;
}
// Small helper: ensure GET responses aren't cached by browser/proxies
private void NoCache()
{
Response.Headers["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0";
Response.Headers["Pragma"] = "no-cache";
Response.Headers["Expires"] = "0";
}
// ADMIN: list all orders
[Authorize(Roles = SD.RoleAdmin)]
[HttpGet("GetAllOrders")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public async Task GetAllOrders()
{
NoCache();
var resp = new ResponseDto();
try
{
var dto = await _db.OrderHeaders
.AsNoTracking()
.OrderByDescending(o => o.OrderHeaderId)
.ProjectTo(_mapper.ConfigurationProvider)
.ToListAsync();
resp.Result = dto;
resp.IsSuccess = true;
}
catch (Exception ex)
{
resp.IsSuccess = false;
resp.Message = ex.GetBaseException().Message;
}
return resp;
}
// USER: list my orders (claims-based)
[Authorize]
[HttpGet("GetOrders")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public async Task GetOrders()
{
NoCache();
var response = new ResponseDto();
try
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrWhiteSpace(userId))
{
response.IsSuccess = false;
response.Message = "User not identified.";
return response;
}
var orderHeaders = await _db.OrderHeaders
.AsNoTracking()
.Where(u => u.UserId == userId)
.Include(o => o.OrderDetails)
.OrderByDescending(o => o.OrderHeaderId)
.ToListAsync();
response.Result = _mapper.Map(orderHeaders);
response.IsSuccess = true;
}
catch (AutoMapperMappingException amex)
{
response.IsSuccess = false;
response.Message = amex.InnerException?.Message ?? amex.Message;
}
catch (Exception ex)
{
response.IsSuccess = false;
response.Message = ex.Message;
}
return response;
}
// USER: create an order — returns created order + latest orders so UI can refresh instantly
[Authorize]
[HttpPost("CreateOrder")]
public async Task CreateOrder([FromBody] CartDto cartDto)
{
var response = new ResponseDto();
try
{
if (cartDto?.CartHeader == null || cartDto.CartDetails == null || !cartDto.CartDetails.Any())
{
response.IsSuccess = false;
response.Message = "Cart is empty or invalid.";
return response;
}
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrWhiteSpace(userId))
{
response.IsSuccess = false;
response.Message = "User not identified.";
return response;
}
// Map & persist new order
var orderHeaderDto = _mapper.Map(cartDto.CartHeader);
orderHeaderDto.UserId = userId; // ensure owner is set
orderHeaderDto.OrderTime = DateTime.UtcNow; // use UTC for consistency
orderHeaderDto.Status = SD.Status_Pending;
orderHeaderDto.OrderDetails = _mapper.Map(cartDto.CartDetails);
var orderEntity = _mapper.Map(orderHeaderDto);
await _db.OrderHeaders.AddAsync(orderEntity);
await _db.SaveChangesAsync();
// set generated id back on DTO
orderHeaderDto.OrderHeaderId = orderEntity.OrderHeaderId;
// fetch latest orders for this user so the client can immediately refresh its table
var latestOrders = await _db.OrderHeaders
.AsNoTracking()
.Where(o => o.UserId == userId)
.Include(o => o.OrderDetails)
.OrderByDescending(o => o.OrderHeaderId)
.ProjectTo(_mapper.ConfigurationProvider)
.ToListAsync();
response.Result = new
{
created = orderHeaderDto,
orders = latestOrders
};
response.IsSuccess = true;
}
catch (Exception ex)
{
response.IsSuccess = false;
response.Message = ex.Message;
}
return response;
}
// USER/ADMIN: get a single order (non-admin must own it)
[Authorize]
[HttpGet("GetOrder/{orderId:int}")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public async Task GetOrder(int orderId)
{
NoCache();
var response = new ResponseDto();
try
{
var orderHeader = await _db.OrderHeaders
.AsNoTracking()
.Include(o => o.OrderDetails)
.FirstOrDefaultAsync(o => o.OrderHeaderId == orderId);
if (orderHeader == null)
{
response.IsSuccess = false;
response.Message = "Order not found.";
return response;
}
var isAdmin = User.IsInRole(SD.RoleAdmin);
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (!isAdmin && !string.Equals(orderHeader.UserId, userId, StringComparison.Ordinal))
{
response.IsSuccess = false;
response.Message = "Forbidden.";
return response;
}
response.Result = _mapper.Map(orderHeader);
response.IsSuccess = true;
}
catch (AutoMapperMappingException amex)
{
response.IsSuccess = false;
response.Message = amex.InnerException?.Message ?? amex.Message;
}
catch (Exception ex)
{
response.IsSuccess = false;
response.Message = ex.Message;
}
return response;
}
}
}
< /code>
Любая справка, < /p>
ждать вашего ответа, < /p>
С уважением, < /p>
fabrice < /p>
Страница для загрузки, не так и для работы, не работает. Отладка orderapi
Любая справка,
Заранее благодарит вас,
fabrice
Подробнее здесь: [url]https://stackoverflow.com/questions/79782447/mango-project-to-remove-the-error-for-stripe-not-loading[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия