Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在POST请求中获取HTTP 404错误-C_C#_.net_Post_Asp.net Core - Fatal编程技术网

C# 在POST请求中获取HTTP 404错误-C

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和orderId。 然后将显示新订单,并检索已创建订单的代码201。 我不明白为什么代码不起作用。有什么我遗漏的吗

这件事已经做了好几天了,运气不好。 希望你能看到我哪里出了问题

还是编程新手,非常感谢您的帮助

代码如下:

型号:

存储库:

我不认为是您要寻找的answare,但开始添加orderID,就像[fromRoute]参数一样,当您进行调试时,您在参数中看到正确的值了吗?您正在使用aspnet.core2.0吗

您确定路径正确吗?我在previus评论中读到这一条: {customerId}/orders/{orderId}/overview

检查此路径是否正确:
{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);
    }
}