我正在构建一个有两种情况的应用程序:
如何将变量从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
{
}
}
}
}
当前,您的端点正在将sort
指定为路由参数,在发出请求时必须将其传递。由于您希望该参数为可选参数,因此只需从路由模板中删除该参数,它将被视为查询参数:
[HttpGet]
public async Task<IActionResult> Get(string sort)
{
using (var client = new HttpClient())
{
try { }
}
}
您可以使用HttpParams将排序变量传递到服务器API中
const httpParams = order ? { params: new HttpParams().set('sort', order) } : {};
this.http.get<Person[]>(baseUrl + `person', httpParams)