如何构建一个 ASP.Net core Web api Enpoint 来处理带有等号“=”

我想获取一个从此 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# 代码如下所示,端点被击中,但ManufacturerNameID 始终=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”对象时构建查询参数的标准方式。我知道如何处理没有“=”的情况,但我猜“=”是新的标准/最佳实践?


莫回无
浏览 73回答 1
1回答

FFIVE

您的 api 声明似乎不准确。我相信这就是您想要做的:&nbsp;[HttpGet("PartNumber")]&nbsp;/*&nbsp;<---&nbsp;*/ &nbsp;public&nbsp;IEnumerable<Views.ManufacturePartNumber>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PartNumbers(/*&nbsp;-->&nbsp;*/[FromQuery]int&nbsp;manufactureNameID)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{...您希望从QueryString中获取参数,因此您可以使用[FromQuery]参数旁边的属性来指示,例如:[FromQuery]int manufactureNameID此外,您的[HttpGet]属性不需要添加任何其他内容,但“方法路由”在本例中是&nbsp;[HttpGet("PartNumber")]
打开App,查看更多内容
随时随地看视频慕课网APP