Как создать ядро ​​веб-API ASP.Net Enpoint, которое обрабатывает параметры запроса со знаком «=» - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу взять конечную точку, которая построена из этого кода клиентского интерфейса Angular *

  getPartNumbersFromManufacture(manufactureNameId : Number)
  {
    let parameter = new HttpParams().set("FKManufactureNameId", manufactureNameId.toString()) 
    return this.http.get<ManufacturePartNumber[]>(this.manufactureUrl + '/PartNumber', {params: parameter}).pipe(
      tap(data => console.log('All: ' + JSON.stringify(data))),
      catchError(this.handleError)
    );
  }

Это приводит к тому, что запрос выглядит так:

Request URL: https://localhost:5001/api/Manufacture/PartNumber?FKManufactureNameId=14703
Request Method: GET
Status Code: 200 OK
Remote Address: [::1]:5001
Referrer Policy: no-referrer-when-downgrade

.netcoreКод C # выглядит следующим образом, конечная точка подвергается удару, но factoryNameID всегда = 0, и если я пытаюсь изменить его на строку, то это ноль.

    [Route("api/Manufacture")]
    public class ManufactureController : ControllerBase
    { ...
        [HttpGet("PartNumber/{FKManufactureNameId=manufactureNameID}")]
        public IEnumerable<Views.ManufacturePartNumber> PartNumbers(int manufactureNameID) //pass the manufacture id from the frontend and get the part numbers associated with this manufacturer
        {
            TrackingContext context = new TrackingContext();
            IEnumerable<ManufacturePartNumber> manufacturePartNumbers = context.ManufacturePartNumber.Where(n => n.FkManufactureNameId == manufactureNameID);

            List<Views.ManufacturePartNumber> manufacturePartNumberView = new List<Views.ManufacturePartNumber>();
            for (int i = 0; i < manufacturePartNumbers.Count(); i++)
            {
                manufacturePartNumberView.Add(new Views.ManufacturePartNumber(manufacturePartNumbers.ElementAt(i)));
            }
            return manufacturePartNumberView;
        }
   ...}

Что я делаю неправильно, яЯ хочу, чтобы мой код C # обрабатывал этот параметр запроса со знаком равенства, поскольку это кажется стандартным способом, которым класс "HttPClient" создает параметры запроса при передаче объекта "HttpParams".Я знаю, как обращаться с «=», но я предполагаю, что «=» - это новый стандарт / лучшая практика?

1 Ответ

3 голосов
/ 27 сентября 2019

Ваша декларация API кажется неправильной.

Я думаю, что вы хотите сделать следующее:

 [HttpGet("PartNumber")] /* <--- */
 public IEnumerable<Views.ManufacturePartNumber> 
       PartNumbers(/* --> */[FromQuery]int manufactureNameID) 
        {...

Вы хотите, чтобы параметр был взят из QueryString поэтому вы указываете это с помощью атрибута [FromQuery] рядом с параметром, например:

[FromQuery]int manufactureNameID

Также ваш атрибут [HttpGet] не должен добавлять ничего, кроме "Метод маршрутизации », который в данном случае равен [HttpGet("PartNumber")]

...