NSwag在Blazor客户端的使用

        OpenAPI在前后端分离的开发中可极大的提高开发效率,而使用NSwag工具在可以使前端的开发更加自动化,代码量更少。由于网上参考资源较少,现记录下。

一、环境

dotnet --list-sdks
5.0.403 [C:\Program Files\dotnet\sdk]
6.0.201 [C:\Program Files\dotnet\sdk]

Win10+Vs2022

二、使用NSwag在前端项目中引入OpenAPI对象

在Vs2022解决方案下的前端项目中打开Connected Services

选择 连接的服务->服务引用(OpenAPI,gRPC,WCF Web Service)

 选择  添加新的服务

在向导中选择OpenAPI

 

输入Swagger Json文件的 URL

 

 点击完成后,NSwag工具会自动生动客户端引用代码

在配置好的服务中点击  查看生成的代码  则可以看到NSwag工具自动生成的代码和类

//----------------------
// <auto-generated>
//     Generated using the NSwag toolchain v13.0.5.0 (NJsonSchema v10.0.22.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)
// </auto-generated>
//----------------------

#pragma warning disable 108 // Disable "CS0108 '{derivedDto}.ToJson()' hides inherited member '{dtoBase}.ToJson()'. Use the new keyword if hiding was intended."
#pragma warning disable 114 // Disable "CS0114 '{derivedDto}.RaisePropertyChanged(String)' hides inherited member 'dtoBase.RaisePropertyChanged(String)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword."
#pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?'
#pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ...
#pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..."

namespace FrontWeb
{
    [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.0.5.0 (NJsonSchema v10.0.22.0 (Newtonsoft.Json v11.0.0.0))")]
    public partial class swaggerClient 
    {
        private string _baseUrl = "";
        private System.Net.Http.HttpClient _httpClient;
        private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings;
    
        public swaggerClient(string baseUrl, System.Net.Http.HttpClient httpClient)
        {

 三、使用生成的代码实现对OpenAPI的调用

从生成的代码中可以看到,NSwag工具自动生成了一个swaggerClient类,其下实现了OpenAPI后端的各个实例和API可以直接调用

 

@code {
    private ICollection<FrontWeb.Stock>? stocks;
    private int tt=0;
    private FrontWeb.Stock newStock = new FrontWeb.Stock();
    //读取全部记录
    protected override async Task OnInitializedAsync()
    {
        var httpclient = new HttpClient();
        var swaggerC = new swaggerClient("https://localhost:7270",httpclient);
        stocks = await swaggerC.StocksAllAsync();
        if(stocks !=null)
        {
            tt = stocks.Count;
        }
    }
    //添加一个实体
    private void addStock()
    {
        if(string.IsNullOrEmpty(newStock.CodeNum))
        {
            return;
        }
        if (newStock.CodeNum.Trim().Length >= 5)
        {
            var httpclient = new HttpClient();
            var swaggerC = new swaggerClient("https://localhost:7270", httpclient);

            swaggerC.StocksAsync(newStock);
            if (stocks != null)
            {
                stocks.Add(newStock);
            }
        }

    }
    //删除一个实体
    private void  deleteStock(FrontWeb.Stock tmpStock)
    {
        if(tmpStock !=null)
        {
            var httpclient = new HttpClient();
            var swaggerC = new swaggerClient("https://localhost:7270", httpclient);

            swaggerC.Stocks4Async(tmpStock.StockId);

            stocks.Remove(tmpStock);

        }
    }

四、参考文章

1、NSwag 和 ASP.NET Core 入门 | Microsoft Docs

2、Swashbuckle 和 ASP.NET Core 入门 | Microsoft Docs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值