Angular 向 C# Http 传递查询参数
Angular to C# Http passing query parameters
我认为 C# HttpGet 模板是我所缺少的,但这是详细信息。在 Angular 前端:
let params = new HttpParams()
.append('GDWarn', values[0].toString())
.append('GDLimit', values[1].toString())
.append('NDWarn', values[2].toString())
.append('NDLimit', values[3].toString())
let url = `${this.url}/CalibrationModelFile/UpdateLimits/${this.networkID}/${constID}/{params}`
这里我假设 this.http.get(url, …
会做一些魔术来识别 HttpParams
是一组 QUERY 参数。
所以C#后端接收http请求:
[HttpGet("CalibrationModelFile/UpdateLimits/{networkID:int}/{ConstituentID:int}/{values}")]
public async Task UpdateConstituentLimits(int networkID, int ConstituentID, [FromQuery] double[,] values)
我认为 [FromQuery]
可能是正确的,但还不够。模板中的 {values]
可能应该有一些东西,所以我们知道它是 QUERY PARMS?
有什么想法吗?
提前致谢,Yogi
发送数组作为查询参数
如果您尝试像这样获取一组查询参数和路由参数:
.../UpdateLimits/networkID/ConstituentID?values=array
您应该发送一个请求,如示例所示:
.../UpdateLimits/1/2?values=3.0&values=4.0&values=5.0
查询参数不是路由的一部分
Action 在 C# 中的参数将是:
[HttpGet("CalibrationModelFile/UpdateLimits/{networkID:int}/{ConstituentID:int}")]
public async Task UpdateConstituentLimits(int networkID, int ConstituentID, [FromQuery] double[] values)
在上面的示例中,{values}
已从路线中删除,因为 QueryParam
不是路线的一部分。另外,最好用 [FromRoute]
属性修饰路由参数。
二维数组作为查询参数
现在,如果情况是二维数组作为查询参数,一个简单的解决方案是将二维数组转换为字符串并在 C# 操作中解析该字符串,如下代码所示:
.../UpdateLimits/1/2?values=GDWarn:4.1,GDLimit:3.7,NDWarn:6.3,NDLimit:4.8
在结果操作中解析查询字符串将是这样的:
[HttpGet("{networkID:int}/{ConstituentID:int}")]
public IEnumerable<WeatherForecast> Get([FromRoute]int networkID,
[FromRoute]int ConstituentID, [FromQuery]string values)
{
// received string is: "GDWarn:4.1,GDLimit:3.7,NDWarn:6.3,NDLimit:4.8"
var dict = new Dictionary<string, double>();
foreach (var item in values.Split(','))
dict.Add(item.Split(':')[0], Convert.ToDouble(item.Split(':')[1]));
return (...)
}
我认为 C# HttpGet 模板是我所缺少的,但这是详细信息。在 Angular 前端:
let params = new HttpParams()
.append('GDWarn', values[0].toString())
.append('GDLimit', values[1].toString())
.append('NDWarn', values[2].toString())
.append('NDLimit', values[3].toString())
let url = `${this.url}/CalibrationModelFile/UpdateLimits/${this.networkID}/${constID}/{params}`
这里我假设 this.http.get(url, …
会做一些魔术来识别 HttpParams
是一组 QUERY 参数。
所以C#后端接收http请求:
[HttpGet("CalibrationModelFile/UpdateLimits/{networkID:int}/{ConstituentID:int}/{values}")]
public async Task UpdateConstituentLimits(int networkID, int ConstituentID, [FromQuery] double[,] values)
我认为 [FromQuery]
可能是正确的,但还不够。模板中的 {values]
可能应该有一些东西,所以我们知道它是 QUERY PARMS?
有什么想法吗?
提前致谢,Yogi
发送数组作为查询参数
如果您尝试像这样获取一组查询参数和路由参数:
.../UpdateLimits/networkID/ConstituentID?values=array
您应该发送一个请求,如示例所示:
.../UpdateLimits/1/2?values=3.0&values=4.0&values=5.0
查询参数不是路由的一部分
Action 在 C# 中的参数将是:
[HttpGet("CalibrationModelFile/UpdateLimits/{networkID:int}/{ConstituentID:int}")]
public async Task UpdateConstituentLimits(int networkID, int ConstituentID, [FromQuery] double[] values)
在上面的示例中,{values}
已从路线中删除,因为 QueryParam
不是路线的一部分。另外,最好用 [FromRoute]
属性修饰路由参数。
二维数组作为查询参数
现在,如果情况是二维数组作为查询参数,一个简单的解决方案是将二维数组转换为字符串并在 C# 操作中解析该字符串,如下代码所示:
.../UpdateLimits/1/2?values=GDWarn:4.1,GDLimit:3.7,NDWarn:6.3,NDLimit:4.8
在结果操作中解析查询字符串将是这样的:
[HttpGet("{networkID:int}/{ConstituentID:int}")]
public IEnumerable<WeatherForecast> Get([FromRoute]int networkID,
[FromRoute]int ConstituentID, [FromQuery]string values)
{
// received string is: "GDWarn:4.1,GDLimit:3.7,NDWarn:6.3,NDLimit:4.8"
var dict = new Dictionary<string, double>();
foreach (var item in values.Split(','))
dict.Add(item.Split(':')[0], Convert.ToDouble(item.Split(':')[1]));
return (...)
}