c# - Angular 到 C# Http 传递查询参数

标签 c# angular http query-string

我认为 C# HttpGet TEMPLATE 是我所缺少的,但这是详细信息。在 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# - Angular 到 C# Http 传递查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256526/

相关文章:

java - 如何在我的应用程序中添加 SSL?

javascript - Nodejs Socket 挂断和 ECONNRESET - 从 Meteor 到 Node js 服务器的 HTTP 发布请求

php - 不使用 CURL 发送 GET 请求

c# - 一个很好的 C# WinForms ListView 组件

c# - P2P 真的是无服务器的吗?

c# - 在运行时创建一组两个 Div

c# - 将 EAP 包装在任务中

angular - 如何更改 Angular Material 排序图标

javascript - Angular 2 动态表单 - 实现清晰的功能

angular - 在 systemjs 中捆绑是否有意义