Проект Mango для удаления ошибки для полосы, не загруженнойC#

Место общения программистов C#
Ответить
Anonymous
 Проект Mango для удаления ошибки для полосы, не загруженной

Сообщение 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

Подробнее здесь: https://stackoverflow.com/questions/797 ... ot-loading
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»