对C#API的Angular 8 GET请求

问题描述 投票:0回答:2

我正在构建一个有两种情况的应用程序:

  1. 我没有将任何变量(没有排序)传递到API网址;
  2. 我将变量(排序)传递到API网址。

如何将变量从JavaScript API调用公开给C#API。

Angular

  // pass in no value (default, when page is refreshed)

  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
    http.get<Person[]>(baseUrl + 'person').subscribe(result => {
      this.persons = result;
    }, error => console.error(error));
  }

 // when button is clicked (pass in through parameter)

 sort(order: string) {
     const baseUrl = document.getElementsByTagName('base')[0].href;
     let params = new HttpParams();
     this.http.get<Person[]>(baseUrl + `person?sort=${order}`).subscribe(result => {
         this.persons = result;
     }, error => console.error(error));
 }

C#

[ApiController]
[Route("[controller]")]
public class PersonController : ControllerBase
{
    static string address = "https://demo6957850.mockable.io/people";

    [HttpGet("{sort}")]
    public async Task<IActionResult> Get(string sort)
    {
        using (var client = new HttpClient())
        {
            try
            {
            }
        }
    }
 }
c# angular
2个回答
0
投票

当前,您的端点正在将sort指定为路由参数,在发出请求时必须将其传递。由于您希望该参数为可选参数,因此只需从路由模板中删除该参数,它将被视为查询参数:

[HttpGet]
public async Task<IActionResult> Get(string sort) 
{
    using (var client = new HttpClient()) 
    { 
        try { } 
    } 
}

0
投票

您可以使用HttpParams将排序变量传递到服务器API中

const httpParams = order ? { params: new HttpParams().set('sort', order) } : {};
this.http.get<Person[]>(baseUrl + `person', httpParams)
© www.soinside.com 2019 - 2024. All rights reserved.