«Содержит» не работает, контроллер asp.net - PullRequest
1 голос
/ 27 марта 2020

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

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

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

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

Break point return length: 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;

    }
}

Angular сервисный код

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 ]

2 голосов
/ 27 марта 2020

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

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

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

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

api/Producto/filtrarProductosPorNombre/Galletas
0 голосов
/ 28 марта 2020

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

Эта строка в angular сервисном коде

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("api/Producto/filtrarProductosPorNombre/{nombre}")]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...