Nuget包
Swashbuckle.AspNetCore
Program.cs
swagger支持 API 自动生成同步的在线文档,下面在.NET6中引入
builder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen(options =>{options.SwaggerDoc("v1", new OpenApiInfo{Version = "v1",Title = "API标题",Description = "API描述"});var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));});var appSetting = new AppSetting();
实体类
namespace ES.NET.Client.Demo.Models;/// <summary>/// 用血明细/// </summary>public class BoutItems{/// <summary>/// 索引Id/// </summary>public int Id { get; set; }/// <summary>/// 科室Id/// </summary>public int Deptno { get; set; }/// <summary>/// 科室名称/// </summary>public string Deptname { get; set; }/// <summary>/// 血制品编号/// </summary>public string Bloodno { get; set; }/// <summary>/// 血制品名称/// </summary>public string Bloodname { get; set; }/// <summary>/// 用血量/// </summary>public float Boutcount { get; set; }/// <summary>/// 单位/// </summary>public string Bloodunitname { get; set; }/// <summary>/// 出库日期/// </summary>public DateTime Bodate { get; set; }}
控制器类
using Elastic.Clients.Elasticsearch;using Elastic.Clients.Elasticsearch.QueryDsl;using ES.NET.Client.Demo.Models;using ES.NET.Client.Demo.Services;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Options;namespace ES.NET.Client.Demo.Controllers.ES;/// <summary>/// 血库明细索引控制器/// </summary>public class BoutItemsController : AreaController{private readonly ElasticSetting elasticSetting;private readonly ElasticsearchClient esClient;public BoutItemsController(IOptionsSnapshot<AppSetting> options,IElasticSearchHelper esClientConnHelp){if (options == null || options.Value == null)throw new ArgumentNullException(nameof(options));if(esClientConnHelp.ESClient==null)throw new ArgumentNullException(nameof(esClientConnHelp));elasticSetting = options.Value.ElasticSetting;esClient = esClientConnHelp.ESClient;}/// <summary>/// 创建索引/// </summary>/// <param name="entity"></param>/// <returns></returns>[HttpPut]public async Task<IActionResult> IndexAsync(BoutItems entity){if (entity == null || entity.Id <= 0) return NoContent();var response = await esClient.IndexAsync(entity, request => request.Index(elasticSetting.IndexSetting.BOutIndex));if (response.IsValid){Console.WriteLine($"Index document with ID {response.Id} succeeded.");}return Ok(response);}/// <summary>/// 获取文档/// </summary>/// <param name="id"></param>/// <returns></returns>[HttpGet]public async Task<IActionResult> GetAsync(string id){var response = await esClient.GetAsync<BoutItems>(id, idx => idx.Index(elasticSetting.IndexSetting.BOutIndex));var entity = response.Source;return Ok(entity);}/// <summary>/// 搜索文档(lambda方式)/// </summary>/// <param name="userName"></param>/// <returns></returns>[HttpGet]public async Task<IActionResult> SearchAsync(string deptname){var response = await esClient.SearchAsync<BoutItems>(s => s.Index(elasticSetting.IndexSetting.BOutIndex).From(0).Size(10).Query(q => q.Term(t => t.Deptname, deptname)));if (response.IsValid){var entity = response.Documents.FirstOrDefault();return Ok(entity);}else{return NotFound();}}/// <summary>/// 搜索文档(实体对象方式)/// </summary>/// <param name="deptname"></param>/// <returns></returns>[HttpGet]public async Task<IActionResult> SearchRequestAsync(string deptname){var request = new SearchRequest(elasticSetting.IndexSetting.BOutIndex){From = 0,Size = 10,Query = new TermQuery("deptname") { Value = deptname }};var response = await esClient.SearchAsync<BoutItems>(request);if (response.IsValid){var entity = response.Documents.FirstOrDefault();return Ok(entity);}else{return NotFound();}}/// <summary>/// 更新文档/// </summary>/// <param name="entity"></param>/// <returns></returns>[HttpPost]public async Task<IActionResult> UpdateAsync(BoutItems entity){if (entity == null || entity.Id <= 0) return NoContent();var response = await esClient.UpdateAsync<BoutItems, object>(elasticSetting.IndexSetting.BOutIndex, entity.Id.ToString(), u => u.Doc(entity));if (response.IsValid){Console.WriteLine("Update document succeeded.");}return Ok(response);}/// <summary>/// 删除文档/// </summary>/// <param name="id"></param>/// <returns></returns>[HttpPost]public async Task<IActionResult> DeleteAsync(string id){if (string.IsNullOrWhiteSpace(id)) return NoContent();var response = await esClient.DeleteAsync(elasticSetting.IndexSetting.BOutIndex, id);if (response.IsValid){Console.WriteLine("Delete document succeeded.");}return Ok(response);}}
生成xml文件
生成xml文件,接口文档生成注释需要程序集的xml文件
打开项目的.csproj文件加上标识让程序生成这个程序集的文档
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net6.0</TargetFramework><Nullable>enable</Nullable><ImplicitUsings>enable</ImplicitUsings><GenerateDocumentationFile>true</GenerateDocumentationFile></PropertyGroup><ItemGroup><PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.0.0-beta.5" /><PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" /></ItemGroup></Project>
运行测试


