Получение ошибки HTTP 404 в запросе POST - C #

Я пытаюсь создать новые customerId и orderId. Затем будет отображаться новый порядок и получить код 201 для создания. Я не понимаю, почему код не работает. Есть что-то, что мне не хватает?

Работал над этим несколько дней без везения. Надеюсь, вы увидите, где я ошибся.

Все еще новые для программирования и действительно ценят вашу помощь.

Код ниже:

Модели:

using System.Collections.Generic;

namespace Project.Models
{
    public class Customer
    {
       public string CustomerId { get; set; }
       public string FirstName { get; set; }
       public string LastName { get; set; }
       public string DateOfBirth { get; set; }
    }

   public class Order
   {
       public string OrderId { get; set; }
       public string Product { get; set; }
       public string Status { get; set; }
       public double Price { get; set; }
   }

    public class CustomerOrder
    {
      public string CustomerId {get; set;}
      public string OrderId { get; set; }
    } 
}

Хранилища:

using System.Collections.Generic;
using System.Linq;
using Project.Models;
using System.Net;
using System.Collections.Specialized;
using System.Text;


namespace Project.Repositories
{
   public class OrderRepository
   {

       private static List<Order> _Orders;
       private static List<CustomerOrder> _CustomerOrder;

       static OrderRepository()
       {
           _Orders = new List<Order>();
           _CustomerOrder= new List<CustomerOrder>();

           _Orders.Add(new Order
           {
               OrderId = "124",
               Product= "Shirts",
               Status= "On it's way",
               Price= 100.20,
           });

           _Orders.Add(new Order
           {
               OrderId= "122",
               Product= "Pants",
               Status= "Not ready",
               Price= 300.30,
           });

           _Orders.Add(new Order
           {
               OrderId= "143",
               Product= "Deadpool",
               Status= "On it's way",
               Price= 6.20,
           });

           _Orders.Add(new Order
           {
               OrderId= "156",
               Product= "Socks",
               Status= "Not ready",
               Price= 3.30,
           });

           _CustomerOrder.Add(new CustomerOrder
           {
               CustomerId = "578",
               OrderId = "156",
           });
}

public static void SaveNewCustomerOrder(string customerId, string orderId, CustomerOrder customerOrder)
{
    order.CustomerID = customerId;
    order.OrderId= orderId;
    Order.Add(order);
}

Контроллеры:

OrderController.cs:

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Project.Models;
using Project.Repositories;

namespace Project.Controllers
{
   public class OrderController : Controller
   {
      [HttpPost("customers/{customerId}/orders/{orderId}/overview")]
       public IActionResult Post([FromRoute] string customerId, string orderId, [FromBody] CustomerOrder customerOrder)
       {
          OrderRepository.SaveNewCustomerOrder(customerId, orderId, customerOrder);

          return Ok();
       }
    }
 }

c#,.net,post,asp.net-core,

-1

Ответов: 4


Хранилища:

using System.Collections.Generic;
using System.Linq;
using Project.Models;
using System.Net;
using System.Collections.Specialized;
using System.Text;


namespace Project.Repositories
{
   public class OrderRepository
   {

       private static List<Order> _Orders;
       private static List<CustomerOrder> _CustomerOrder;

       static OrderRepository()
       {
           _Orders = new List<Order>();
           _CustomerOrder= new List<CustomerOrder>();

           _Orders.Add(new Order
           {
               OrderId = "124",
               Product= "Shirts",
               Status= "On it's way",
               Price= 100.20,
           });

           _Orders.Add(new Order
           {
               OrderId= "122",
               Product= "Pants",
               Status= "Not ready",
               Price= 300.30,
           });

           _Orders.Add(new Order
           {
               OrderId= "143",
               Product= "Deadpool",
               Status= "On it's way",
               Price= 6.20,
           });

           _Orders.Add(new Order
           {
               OrderId= "156",
               Product= "Socks",
               Status= "Not ready",
               Price= 3.30,
           });

           _CustomerOrder.Add(new CustomerOrder
           {
               CustomerId = "578",
               OrderId = "156",
           });
}

public static void SaveNewCustomerOrder(string customerId, string orderId, CustomerOrder customerOrder)
{
    order.CustomerID = customerId;
    order.OrderId= orderId;
    Order.Add(order);
}

Контроллеры:

OrderController.cs:

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Project.Models;
using Project.Repositories;

namespace Project.Controllers
{
   public class OrderController : Controller
   {
      [HttpPost("customers/{customerId}/orders/{orderId}/overview")]
       public IActionResult Post([FromRoute] string customerId, string orderId, [FromBody] CustomerOrder customerOrder)
       {
          OrderRepository.SaveNewCustomerOrder(customerId, orderId, customerOrder);

          return Ok();
       }
    }
 }

4-1
0
[HttpPost("customers/{customerId}/orders/{orderId}/overview")]
public IActionResult Post([FromRoute] string customerId, [FromRoute] string orderId, [FromBody] CustomerOrder customerOrder)
{
    OrderRepository.SaveNewCustomerOrder(customerId, orderId, customerOrder);

    return Ok();
}

Я не думаю, что это то, что вы ищете, но начинаете добавлять orderID, как параметр [fromRoute], когда вы выполняете отладку, видите ли вы правильные значения в параметрах? Вы используете aspnet .core 2.0?

вы уверены, что путь правильный? Я прочитал в предыдущем комментарии следующее: http: // localhost: 5000 / customers / {customerId} / orders / {orderId} / overview

Проверьте этот путь: http: // localhost: 5000 / api / customers / {customerId} / orders / {orderId} / обзор


0

Вы должны обновить HttpPost («Путь»)

В соответствии с этим И это

это лучше использовать

[RoutePrefix("Path")] с классом / контроллером и

[Route("Path")] Декоратор действия.


0

Я скопировал ваш код, но есть некоторые проблемы с тем, что вы ожидаете.

1)

public static void SaveNewCustomerOrder(string customerId, string orderId, CustomerOrder customerOrder)
{
    order.CustomerID = customerId;
    order.OrderId= orderId;
    Order.Add(order);
}

Внутри этого метода вы пытаетесь добавить customerId и orderId, но они не относятся к классу заказов. Затем вы пытаетесь добавить этот заказ в список заказов. Я думаю, вы, возможно, хотели бы передать заказ, а не заказ клиента. У меня есть следующие классы и контроллеры:

контроллер:

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using ben22.Repositories;
using ben22.Models.Models;

namespace ben22.Controllers
{
    public class OrderController : Controller
    {
        [HttpPost("customers/{customerId}/orders/{orderId}/overview")]
        public IActionResult Post([FromRoute] string customerId, string orderId, [FromBody] Order order)
        {
            OrderRepository.SaveNewCustomerOrder(customerId, orderId, new Order());

            return Ok();
        }
    }
}

Обновлено SaveNewCustomerOrder:

public static void SaveNewCustomerOrder(string customerId, string orderId, Order order)
{
    var newCustomer = new CustomerOrder
    {
        CustomerId = customerId,
        OrderId = orderId
    };
    _CustomerOrder.Add(newCustomer);

    _Orders.Add(order);

}

Нажатие следующей конечной точки (Заменить yourPort):

http: // localhost : {yourPort} / customers / 1 / orders / 2 / overview

Тело:

{
  "orderId": "55",
  "product": "Football",
  "status": "Approved",
  "price": 9.99
}

Кроме того, если это не работает, я бы проверил ваш launchUrl в visual studio и, возможно, перезапустил его.


0

Предполагая следующее

Я хочу показать новый порядок и получить код 201 для создания

Ниже приводится только пример продемонстрированного примера выше, и он не берется непосредственно из вашего примера.

public class OrderController : Controller {
    //...removed for brevity

    //POST "customers/578/orders/1576/overview
    [HttpPost("customers/{customerId}/orders/{orderId}/overview")]
    public IActionResult Post(string customerId, string orderId) {
        var order = orderRepository.CreateNewCustomerOrder(customerId, orderId);
        if(order == null) {
            return BadRequest();
        }
        //return 201 created status code along with 
        //the route name, route value, and the actual object that is created
        return CreatedAtRoute("GetOrder", new { orderId = order.OrderId }, order);
    }

    //GET orders/157
    [HttpGet("orders/{orderId}", Name = "GetOrder")]
    public IActionResult GetOrder(string orderId) {
        var order = orderRepository.GetOrder(orderId);
        if(order == null) {
            return NotFound();
        }
        return Ok(order);
    }
}
C # ,. сеть, почта, asp.net-жильный,
Похожие вопросы