Найти конкретный предмет на icollection - PullRequest
0 голосов
/ 05 октября 2018

Я работаю над веб-интерфейсом и пытаюсь найти продукт по его имени с помощью icollection, в частности продукт, который будет соответствовать указанному имени (? Name = {name}).

В настоящее время у меня естьэто:

[HttpGet("name", Name = "GetProductByName")]
public ActionResult<Product> GetByName(string _name)
{
    var prod = (from x in _context.Products 
                where x.Name == _name 
                select x).FirstOrDefault();

    if (prod == null)
    {
        return NotFound();
    }
    return prod;
}

Но всякий раз, когда я запрашиваю API (api / product /? name = {name}, я получаю все результаты

Что я делаю не так?

РЕДАКТИРОВАТЬ: Остаток контроллера, поскольку это не несоответствие параметров. Я использую EF DbSet

[Route("api/Product")]
[ApiController]
public class ProductController : ControllerBase
{
    private readonly OrderingProductsContext _context;

    public ProductController(OrderingProductsContext context)
    {
        _context = context;
    }


    [HttpGet]
    public ActionResult<List<Product>> GetAll()
    {
        return _context.Products.ToList();
    }


    [HttpGet("{id}", Name = "GetProduct")]
    public ActionResult<Product> GetById(long id)
    {
        var prod = _context.Products.Find(id);
        if (prod == null)
        {
            return NotFound();
        }
        return prod;
    }


    [HttpPost]
    public IActionResult Create(Product prod)
    {
        _context.Products.Add(prod);
        _context.SaveChanges();

        return CreatedAtRoute("GetProduct", new { id = prod.ID }, prod);
    }

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Вы получаете _name в качестве параметра, но проверяете свое состояние с помощью name

, изменяете

var prod = (from x in _context.Products where x.Name == name select x).FirstOrDefault();

с

var prod = (from x in _context.Products where x.Name == _name select x).FirstOrDefault();
0 голосов
/ 05 октября 2018

Во-первых, вы должны использовать фигурные скобки в параметре атрибута;

[HttpGet("{name}", Name = "GetProductByName")]

Затем вы можете вызвать эту конечную точку с помощью этого;

 api/product/GetProductByName/{name}

Или, если вы хотите вызвать с запросомстроки, с которыми вы можете пойти;

[HttpGet(Name = "GetProductByName")]
public ActionResult<Product> GetByName([FromQuery]string name)

и запросить как;

api/product/GetProductByName?name={name}
0 голосов
/ 05 октября 2018

Вы должны заменить _name на name в определении вашего метода.Исходя из опубликованного вами кода, ясно, что в предложении where не используется параметр, передаваемый при каждом вызове GetByName, но используется значение переменной name.

...