所有方法在ASP.NET WEB API控制器中都作为HTTP动词(Get、Put、Post和Delete)来执行。

3
我正在构建一个ASP.NET Core 2.0 Web API。我的控制器有几个方法。但是,当我从Postman调用时,所有方法都无法工作。每次它都表现得像HTTP(Get、Put、Post和Delete)动词。那么,如何从客户端调用我的所需方法?或者,这种方式是否可行?
以下是我的代码:
namespace DutchTreat.Controllers
{
    [Route("api/[controller]")]
    public class OrdersController : Controller
    {
        private readonly IDutchRepository _ctx;
        private readonly ILogger<OrdersController> _logger;

        public OrdersController(IDutchRepository _ctx, ILogger<OrdersController> logger)
        {
            this._ctx = _ctx;
            _logger = logger;
        }

        [HttpGet]
        public IActionResult Get()
        {
            try
            {
                return Ok(_ctx.GeAllOrders());
            }
            catch (Exception e)
            {
                return BadRequest("Something Went Wrong");
            }
        }

        [HttpGet("{id:int}")]
        public IActionResult GetOrdersById(int id)
        {
            try
            {
                var orders = _ctx.GetOrdersById(id);

                if (orders != null)
                    return Ok(orders);
                else
                    return NotFound();
            }
            catch (Exception e)
            {
                return BadRequest("Something Went Wrong");
            }
        }

        [HttpPost]
        public IActionResult Post(Order model)
        {
            try
            {
               _ctx.AddEntity(model);
                _ctx.SaveChanges();

                return Created($"/api/orders/{model.Id}", model);
            }
            catch (Exception e)
            {
                return BadRequest("Something Went Wrong");
            }
        }

        public IActionResult SampleMethod()
        {
            // Sample Method Definition

            return null;
        }
    }
}

我向Postman发出请求:http://localhost:8888/api/orders/SampleMethod,结果显示404未找到


当你用Postman调用它们时会发生什么?你会得到什么响应? - ctyar
你能分享一下你控制器类的定义吗? - Artak
1
请解释一下您所说的“始终表现为HTTP(Get、Put、Post和Delete)动词”,因为我不理解您的问题。此外,请发布代码而不是屏幕截图,因为如果有人想测试您的代码,他们无法将屏幕截图复制粘贴到Visual Studio或其他工具中。 - CodingYoshi
1
另外,Web API 使用约定,因此在您的控制器中,每个以“Get”开头的操作都被视为“HTTP GET”,即使您在方法上没有使用“HttpGet”属性。 - CodingYoshi
我正在使用Postman请求此URL:localhost:8888/api/orders/SampleMethod。但是没有到达该方法。这里,orders是我的控制器名称,SampleMethod是我的方法名称。 - Abhijit Mondal Abhi
显示剩余3条评论
1个回答

1

SampleMethod缺少路由属性,因此在调用时显示404未找到

更新操作以使用适当定义的路由模板和HTTP{Verb}

以下示例为该操作定义了HTTP GET。

//GET api/orders/SampleMethod 
[HttpGet("SampleMethod")]
public IActionResult SampleMethod() {
    // Sample Method Definition

    return Ok();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接