带有 IAsyncEnumerable RESTFul 服务的 OpenAPI

问题描述 投票:0回答:1

有人可以提供说明,或者最好是一个示例,说明 OpenAPI 如何首先记录并其次为以下 RESTful 服务生成 Javascript 和 C# 客户端代码:-

    [HttpGet]
    public async IAsyncEnumerable<dynamic> yieldLastName(string inName, [EnumeratorCancellation]CancellationToken cancellationToken)
    {
        if (string.IsNullOrWhiteSpace(inName))
        {
            Console.WriteLine("Illeagal Parameter. inName is mandatory.");
            yield break;
        }

        // alter database [AdventureWorks2022] set ALLOW_SNAPSHOT_ISOLATION on;
        TransactionOptions txnOpts = new TransactionOptions() { IsolationLevel = IsolationLevel.Snapshot };

        List<dynamic> namesSelect = new List<dynamic>();

        SqlParameter searchName = new SqlParameter("LastName", System.Data.SqlDbType.Char);
        searchName.Value = inName + "%";

        var sql = @"
            select 
                  LastName,
                  count(*) as hitRate
            from 
                  Person.Person P
            where
                  LastName like @LastName
            group by
                  LastName
            ";

        using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, txnOpts, TransactionScopeAsyncFlowOption.Enabled))
        {
            using (SqlConnection cxn = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand(sql, cxn);
                cmd.Parameters.Add(searchName);
                cmd.CommandTimeout = 120000;
                SqlDataReader reader = null!;
                Boolean hasRows = false;

                try
                {
                    await cxn.OpenAsync(cancellationToken);
                    reader = await cmd.ExecuteReaderAsync(cancellationToken);
                    hasRows = await reader.ReadAsync(cancellationToken);
                }
                catch (TaskCanceledException ex) when (ex.CancellationToken == cancellationToken) { }

                while (!cancellationToken.IsCancellationRequested && hasRows)
                {
                    string lastName = "";
                    int hitRate = 0;

                    if (!reader.IsDBNull(0))
                    {
                        lastName = reader.GetString(0);
                    }
                    hitRate = reader.GetInt32(1);

                    yield return new
                    {
                        LastName = Uri.EscapeDataString(lastName),
                        HitRate = hitRate
                    };

                    try
                    {
                        hasRows = await reader.ReadAsync(cancellationToken);
                    }
                    catch (TaskCanceledException ex) when (ex.CancellationToken == cancellationToken) { }

//                   await Task.Delay(100);  // Slow down the Demo
                }
            }
            scope.Complete();
        }
    } 

可以在此处找到完整的工作示例您需要下载AdventureWorks数据库的副本,并需要 VisualStudio 来运行它。

javascript c# openapi openapi-generator iasyncenumerable
1个回答
0
投票

[HttpGet] 公共异步 IAsyncEnumerable

© www.soinside.com 2019 - 2024. All rights reserved.