Все методы действуют как глагол HTTP (получить, поместить, опубликовать и удалить) в контроллере веб-API ASP.NET.

Я создаю веб-API ASP.NET Core 2.0. Мой контроллер имеет несколько методов. Но все методы не работают, когда я звоню из 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;
        }
    }
}

И я запрашиваю у почтальона: http://localhost:8888/api/orders/SampleMethod Он показывает 404 not found!


person Abhijit Mondal Abhi    schedule 08.04.2018    source источник
comment
Что происходит, когда вы звоните им с почтальоном? Какой ответ вы получаете?   -  person ctyar    schedule 08.04.2018
comment
Можете ли вы также поделиться своим определением класса контроллера?   -  person Artak    schedule 08.04.2018
comment
Пожалуйста, объясните, что вы имеете в виду под Все время ведет себя как глаголы HTTP (Get, Put, Post и Delete), потому что я не понимаю вашего вопроса. Также публикуйте код, а не скриншоты, потому что, если кто-то захочет протестировать ваш код, он не сможет скопировать и вставить скриншот в Visual Studio или другой инструмент.   -  person CodingYoshi    schedule 08.04.2018
comment
Кроме того, веб-API использует соглашения, поэтому в вашем контроллере каждое действие, начинающееся с Get, считается HTTP GET, даже если у вас нет атрибута HttpGet в методе.   -  person CodingYoshi    schedule 08.04.2018
comment
Я запрашиваю этот URL-адрес: localhost:8888/api/orders/SampleMethod у почтальона. Но не достигайте этого метода. Здесь заказы — это имя моего контроллера, а SampleMethod — имя моего метода.   -  person Abhijit Mondal Abhi    schedule 08.04.2018
comment
@CodingYoshi Спасибо. К сожалению, я потерял свои коды. Просто дайте мне знать, в контроллере API все методы работают так же, как глаголы HTTP? Могу ли я написать какие-либо методы и вызвать их со стороны клиента, используя имя контроллера и имя метода?   -  person Abhijit Mondal Abhi    schedule 08.04.2018
comment
Что вы имеете в виду на стороне клиента?   -  person CodingYoshi    schedule 08.04.2018
comment
@ModusTollens Я понял.   -  person Abhijit Mondal Abhi    schedule 08.04.2018


Ответы (1)


SampleMethod отсутствуют атрибуты маршрутизации, поэтому при вызове отображается сообщение 404 Not Found.

Обновите действие, чтобы использовать правильно определенный шаблон маршрута и HTTP{Verb}

В следующем примере определяется HTTP GET для действия.

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

    return Ok();
}
person Nkosi    schedule 08.04.2018