前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Blazor] 地热数据采集项目9 Blazor Server 应用程序中进行 HTTP 请求

[Blazor] 地热数据采集项目9 Blazor Server 应用程序中进行 HTTP 请求

作者头像
科控物联
发布2022-12-20 14:19:15
3400
发布2022-12-20 14:19:15
举报
文章被收录于专栏:科控自动化科控自动化

获取网关信息并显示

代码语言:javascript
复制
{
  "data": [
      {
          "deviceName": "电表1",
          "modbusAddress": "0",
          "variableName": "Ua",
          "value": 239.2
      },
      {
          "deviceName": "电表1",
          "modbusAddress": "2",
          "variableName": "Ub",
          "value": 0
      },
      {
          "deviceName": "电表1",
          "modbusAddress": "4",
          "variableName": "Uc",
          "value": 0
      },
    ..............................//省略其他。。。
    ]
}

编写Service

代码语言:javascript
复制
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;

namespace BlazorApexCharts.Docs.Services
{
    public interface IElectricMeterService
    {
        public Task<IQueryable<QuickType.Datum>> GetElectricMeterAsync(string deviceName);
    }
    public class ElectricMeterService : IElectricMeterService
    {
        private readonly IHttpClientFactory _httpClientFactory = null!;
        private readonly ILogger<ElectricMeterService> _logger = null!;
        public ElectricMeterService(
          IHttpClientFactory httpClientFactory,
          ILogger<ElectricMeterService> logger)
        {
            (_httpClientFactory, _logger) = (httpClientFactory, logger);
        }

        public async Task<IQueryable<QuickType.Datum>> GetElectricMeterAsync(string  deviceName)
        {
            // Create the client
            using HttpClient httpClient = _httpClientFactory.CreateClient();
            try
            {
          var      result = await httpClient.GetAsync($"http://11.168.1.168:8080/api/plugin/device-data/{deviceName}");
            var    content = await result.Content.ReadAsStringAsync();

           var     api = QuickType.TopLevel.FromJson(content.ToString());
              //  _logger.LogInformation("API:{txt}", content);
                return api?.Data.AsQueryable();
            }
            catch (Exception ex)
            {
                _logger.LogError("Error getting something fun to say: {Error}", ex);
            }
            return null;
        }
    }
}

在测试该应用程序之前,我们需要

  • Startup.cs 文件中注册Service 服务。
  • 还需要调用 AddHttpClient 方法注册 IHttpClientFactory
代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
        ......
 services.AddSingleton<IElectricMeterService, ElectricMeterService>();
  services.AddHttpClient();
}

使用:

代码语言:javascript
复制
@inject IElectricMeterService ElectricMeterService
@code {
    private ApexChartOptions<Order> options { get; set; } = new();
    PaginationState pagination = new PaginationState { ItemsPerPage = 20 };
    private static IQueryable<QuickType.Datum> orders ;
    Timer timer;
    QuickType.TopLevel api;
    protected override async Task OnInitializedAsync()
    {
        timer = new System.Threading.Timer(_ =>
    {
        InvokeAsync(ChangeData);
        InvokeAsync(StateHasChanged);
    }, null, 500, 1000);
        var fileName = "电能表实时数据";
        options.Chart = new Chart();
        options.Chart.Toolbar = new Toolbar
            {
                Export = new ExportOptions
                {
                    Csv = new ExportCSV
                    {
                        Filename = fileName,
                        HeaderCategory = "Country",
                    },
                    Png = new ExportPng { Filename = fileName },
                    Svg = new ExportSvg { Filename = fileName }
                }
            };
    }
    async Task ChangeData()
    {
        orders =await ElectricMeterService.GetElectricMeterAsync("电表1");
        //  Console.WriteLine(orders.Count());       
    }
    public void Dispose()
    {
        timer.Dispose();
    }
}

运行效果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档