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 (...)

    }