C# 在POST请求中获取HTTP 404错误-C
我正在尝试创建新的customerId和orderId。 然后将显示新订单,并检索已创建订单的代码201。 我不明白为什么代码不起作用。有什么我遗漏的吗 这件事已经做了好几天了,运气不好。 希望你能看到我哪里出了问题 还是编程新手,非常感谢您的帮助 代码如下: 型号: 存储库: 我不认为是您要寻找的answare,但开始添加orderID,就像[fromRoute]参数一样,当您进行调试时,您在参数中看到正确的值了吗?您正在使用aspnet.core2.0吗 您确定路径正确吗?我在previus评论中读到这一条: {customerId}/orders/{orderId}/overview 检查此路径是否正确:C# 在POST请求中获取HTTP 404错误-C,c#,.net,post,asp.net-core,C#,.net,Post,Asp.net Core,我正在尝试创建新的customerId和orderId。 然后将显示新订单,并检索已创建订单的代码201。 我不明白为什么代码不起作用。有什么我遗漏的吗 这件事已经做了好几天了,运气不好。 希望你能看到我哪里出了问题 还是编程新手,非常感谢您的帮助 代码如下: 型号: 存储库: 我不认为是您要寻找的answare,但开始添加orderID,就像[fromRoute]参数一样,当您进行调试时,您在参数中看到正确的值了吗?您正在使用aspnet.core2.0吗 您确定路径正确吗?我在previus
{customerId}/orders/{orderId}/overview您应该更新您的HttpPostPath 根据和 使用它更好吗 [RoutePrefixPath]与类/控制器和
[RoutePath]Action Method decorator。我复制了您的代码,但您所期望的内容存在一些问题 一, 在该方法中,您试图添加customerId和orderId,但它们不属于order类。然后尝试将此订单添加到订单列表中。 我想你可能是想通过订单而不是客户订单。我有以下类和控制器正在工作: 控制器:
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}/customers/1/orders/2/overview
正文:
此外,如果这不起作用,我会在visual studio中检查您的启动URL,并可能重新启动它。假设以下情况 我希望显示新订单,并检索已创建订单的代码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);
}
}
您的请求正文和url是什么?@D-Shih url:http://localhost:5000/customers/{customerId}/orders/{orderId}/overview,请求主体应该是customerId和orderId。如果这是您所要求的?您可以创建一个无参数GET操作,以检查端点是否有响应。也许是因为你的设置?什么是不工作?你显示代码说它不工作。预期的行为和实际发生的情况是什么?只有这样,我们才能提供一些帮助,而不是猜测不工作会发生什么。使用相关详细信息更新问题。@Nkosi我希望显示新订单并检索已创建的代码201。请使用“答案”部分仅提供解决方案,您可以在问题下的注释中询问信息,如果您不能发表评论,您需要等待OP澄清自己。visual studio代码中的调试没有达到预期效果,因为它没有命中我指定的任何标记。我正在使用.core 2.0,是的。所以您收到错误404,因为您的URL有问题,我很确定您的URL没有找到。我正在使用visual studio代码,有没有重新启动launchUrl的想法=p但我会试试你的解决方案,看看效果如何。仅供参考,我用邮递员来确定终点。如果您使用的是postman,请确保您从请求类型中选择post。我尝试过postman,这很奇怪。它传递customerId和orderId很好,但我在order\u Orders.Addorder中得到null;因此它不会创建新订单。您如何发送请求?您可以发布更新后的saveNewCustomerOrder方法吗?如果使用Postman,请确保您已将请求设置为post。在Body中,选择raw并添加我前面提供的Body代码。
[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();
}
public static void SaveNewCustomerOrder(string customerId, string orderId, CustomerOrder customerOrder)
{
order.CustomerID = customerId;
order.OrderId= orderId;
Order.Add(order);
}
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();
}
}
}
public static void SaveNewCustomerOrder(string customerId, string orderId, Order order)
{
var newCustomer = new CustomerOrder
{
CustomerId = customerId,
OrderId = orderId
};
_CustomerOrder.Add(newCustomer);
_Orders.Add(order);
}
{
"orderId": "55",
"product": "Football",
"status": "Approved",
"price": 9.99
}
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);
}
}