«Содержит» не работает, контроллер asp.net

В настоящее время я делаю веб-приложение с использованием ядра asp.net и angular. Я пытался использовать «Contains» в контроллере, он работает, когда я использую строку, например: .Contains("Galletas") но когда я использую параметр, он не работает, например: .Contains(nombre) .

Я использую сервис angular для вызова метода контроллера базы данных.

Я проверил параметр "nombre", он имеет информацию и не является нулевым.

«Galletas» - это что угодно, я использовал «Galletas» в качестве примера для проверки запроса. Вы можете видеть var "nombre", я хочу, чтобы запрос работал с параметром "nombre". Спасибо большое за помощь.

Точка останова возвращаемая длина: 0

Код контроллера

[HttpGet]
[Route("api/Producto/filtrarProductosPorNombre/{nombre}")]
public IEnumerable<ProductoCLS> filtrarProductosPorNombre(string nombre)
{
    using (BDRestauranteContext bd = new BDRestauranteContext())
    {
        List<ProductoCLS> lista = (from producto in bd.Producto
                                   join categoria in bd.Categoria
                                   on producto.Iidcategoria equals
                                   categoria.Iidcategoria
                                   where producto.Bhabilitado == 1
                                   && producto.Nombre.ToLower().Contains(nombre.ToLower())
                                   select new ProductoCLS
                                   {
                                       idproducto = producto.Iidproducto,
                                       nombre = producto.Nombre,
                                       precio = (decimal)producto.Precio,
                                       stock = (int)producto.Stock,
                                       nombreCategoria = categoria.Nombre

                                   }).ToList();
        return lista;

    } 
}

Когда я использую строку ("Galletas") в Contains работает

[HttpGet]
[Route("api/Producto/filtrarProductosPorNombre/{nombre}")]
public IEnumerable<ProductoCLS> filtrarProductosPorNombre(string nombre)
{
    using (BDRestauranteContext bd = new BDRestauranteContext())
    {
        List<ProductoCLS> lista = (from producto in bd.Producto
                                   join categoria in bd.Categoria
                                   on producto.Iidcategoria equals
                                   categoria.Iidcategoria
                                   where producto.Bhabilitado == 1
                                   //&& producto.Nombre.ToLower().Contains(nombre.ToLower())
                                   && producto.Nombre.Contains("Galletas")
                                   select new ProductoCLS
                                   {
                                       idproducto = producto.Iidproducto,
                                       nombre = producto.Nombre,
                                       precio = (decimal)producto.Precio,
                                       stock = (int)producto.Stock,
                                       nombreCategoria = categoria.Nombre

                                   }).ToList();
        return lista;

    }
}

Угловой сервисный код

import { Injectable, Inject } from '@angular/core'
import { HttpClient } from '@angular/common/http'

@Injectable({
  providedIn: 'root'
})
export class ProductoService {

  urlBase: string;

  constructor(private http: HttpClient, @Inject('BASE_URL') baseUrl: string) {

    // urlBase tiene el nombre del dominio
    this.urlBase = baseUrl;

  }

  public getProducto() {
    return this.http.get(this.urlBase + 'api/Producto/listarProductos');
    //  .subscribe(data => {
    //    console.log(data);
    //  });
  }


  public filtrarProductosPorNombre(nombre) {
    return this.http.get(this.urlBase + 'api/Producto/filtrarProductosPorNombre/{' + nombre + '}');

  }
}

Всего 2 ответа


Основываясь на изображении, похоже, что вы действительно вызываете URL, заканчивающийся на /{Galletas} а не /Galletas

Эта строка в угловом сервисном коде

return this.http.get(this.urlBase + 'api/Producto/filtrarProductosPorNombre/{' + nombre + '}');

добавляет дополнительные фигурные скобки {..} вокруг переданного параметра в сгенерированном URL

В зависимости от переданного Value , URL будет выглядеть как

api/Producto/filtrarProductosPorNombre/{Value}

который не будет соответствовать вашим записям, так как связыватель модели примет буквальную строку как "{Value}" .

Удалите фигурные скобки из своего кода, создавая URL

return this.http.get(this.urlBase + 'api/Producto/filtrarProductosPorNombre/' + nombre);

В контроллере фигурные скобки в шаблоне Route

[Route("api/Producto/filtrarProductosPorNombre/{nombre}")]

представляет заполнитель параметра шаблона маршрута. Он не нужен буквально в URL при выполнении запроса.


Я вижу на первом изображении, под списком местных жителей значение nombre равно "{Galletas}", это должно быть "Galletas"

{} В этом просто означает, что это параметр.

[Route("api/Producto/filtrarProductosPorNombre/{nombre}")]

Итак, звонок из Angular должен быть:

api/Producto/filtrarProductosPorNombre/Galletas

Есть идеи?

10000