Home > Mobile >  When send Parameter pagenumber to web api by post man action not working or recognize?
When send Parameter pagenumber to web api by post man action not working or recognize?

Time:01-08

I work on .net core 6 web api I face issue when

send paramter pagenumber on url by post man

action not catched by break point debug .

so what is issue and How to solve It ?

i try with url

https://localhost:7235/api/items/pageNumber=1

[HttpGet("{pageNumber}")]
    public async Task<IActionResult> GetAll(int pageNumber)
    {
        
    }

it return error 200 bad Request .

but i try with url below

https://localhost:7235/api/items/
   [HttpGet]
    [Route("")]
  
    public async Task<IActionResult> GetAll(int pageNumber)
    {
        
       
    }

it working hit controller success and return data success fromitems controller action get all .

so What is issue please and How to solve it ?

Updated post not working

[HttpGet("{pageNumber}")]
public async Task<IActionResult> GetAll(int pageNumber)
{
}
for this action you need to use this url:

https://localhost:7235/api/items/1

not working and it give me error 500 internal server error

all controller items

using DomainModel.Entities;
using DomainModel.Pagination;
using DomainModel.ViewModel;
using k8s.Models;
using MediatR;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Service.Contract;
using Service.Features.CustomerFeatures.Commands;
using Service.Features.CustomerFeatures.Queries;

namespace WebApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ItemsController : Controller
    {
      
        private readonly IitemService _iitem;
        private readonly IPageHelper<ItemsViewModel> _pageHelper;
        public ItemsController(IitemService iitem, IPageHelper<ItemsViewModel> pageHelper)
        {
            _iitem = iitem;
            _pageHelper = pageHelper;
        }
       
        [HttpPost]
        public async Task<IActionResult> Create(Items item)
        {
            await _iitem.AddAsync(item);
            return Ok();
           
        }

        [HttpGet("{pageNumber}")]
        public async Task<IActionResult> GetAll(int pageNumber)
        {

            var allitems = _iitem.GetAllItems();

            var result = _pageHelper.GetPage(allitems.AsQueryable(), pageNumber);

            var itemsdata = new ItemsPageViewModel
            {
                items = result.Items,
                Pager = result.Pager
            };

            return Ok(itemsdata);
        }

        [HttpGet("{id}")]
        public async Task<IActionResult> GetById(int id)
        {
           
            var details = await _iitem.GetByIdAsync(id);

         
            return Ok(details);
        }

        [HttpDelete("{id}")]
        public async Task<IActionResult> Delete(int id)
        {
            await _iitem.DeleteAsync(id);
            return Ok();
           
        }
 
        [HttpPut("{id}")]
        public async Task<IActionResult> Update(int id, Items item)
        {
            if (id != item.Id)
            {
                return BadRequest();
            }
            await _iitem.UpdateAsync(id, item);
            return Ok();
            
        }
    }
}

CodePudding user response:

The error you are actually getting is

AmbiguousMatchException: The request matched multiple endpoints.

This is because you have two actions that have the same route:

// for this action you need to use this url:
// https://localhost:7235/api/items/1

[HttpGet("{pageNumber}")]
public async Task<IActionResult> GetAll(int pageNumber)
{
    var allitems = _iitem.GetAllItems();

    var result = _pageHelper.GetPage(allitems.AsQueryable(), pageNumber);

    var itemsdata = new ItemsPageViewModel
    {
        items = result.Items,
        Pager = result.Pager
    };

    return Ok(itemsdata);
}

// for this action you ALSO need to use this url:
// https://localhost:7235/api/items/1

[HttpGet("{id}")]
public async Task<IActionResult> GetById(int id)
{       
    var details = await _iitem.GetByIdAsync(id);
         
    return Ok(details);
}

Both actions are HttpGet and both use the same route:

https://localhost:7235/api/items/x

you need to change the route for one of them.

Routing to controller actions in ASP.NET Core

  • Related