【.net 6.0】将swagger的控制器名称替换为中文注释

默认情况下,如果我有一个名为ShippingController的控制器,则swagger生成的UI名称为“Shipping”,我想把我的控制器的名字改成更友好的或者用另一种语言写的。
我能找到的最好的办法是用一个SwaggerOperation属性来改变名字,但是这有一个限制,那就是它是一个方法级别的属性,我真的不想在每个方法上都指定这个名字。
所以,我创建了一个约定类来与控制器的Route属性一起使用,我们通常在控制器上使用这个类,然后让swagger使用它作为控制器的名称。
你知道在属性上有一个name属性,但是生成的swagger似乎没有使用它。

步骤1:创建此类:

当应用程序启动时,它将运行此命令,如果控制器具有指定的Route属性,我将能够查找该属性,然后使用name属性更改控制器的名称。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
namespace RestServices.Configuration.ConfigInstallers.Conventions
{
    public class ControllerDocumentationConvention : IControllerModelConvention
    {
    	// 实现 IControllerModelConvention 接口的方法
        void IControllerModelConvention.Apply(ControllerModel controller)
        {
        	// 如果控制器为 null,则返回
            if (controller == null)
                return;
            // 遍历控制器的所有属性
            foreach (var attribute in controller.Attributes)
            {
            	// 判断属性是否为 RouteAttribute
                if (attribute.GetType() == typeof(RouteAttribute))
                {
                	// 将属性强制转换为 RouteAttribute
                    var routeAttribute = (RouteAttribute)attribute;
                    
                    // 如果 RouteAttribute 的 Name 属性不为空,则将控制器的名称设置为 Name 的值
                    if (!string.IsNullOrWhiteSpace(routeAttribute.Name))
                        controller.ControllerName = routeAttribute.Name;
                }
            }
        }
    }
}

步骤2:启动.cs:

修改StartUp.cs或Program.cs文件,并在配置服务中,我们需要在约定列表中注册我们的类。请参见以下内容:

services.AddControllers(o =>
{
   o.Conventions.Add(new ControllerDocumentationConvention());
});

步骤3:在每个控制器的Route属性中添加名称属性:

[ApiController]
[ApiVersion("1.0")]
[ApiExplorerSettings(IgnoreApi = false, GroupName = "v1")]
[Route("api/Envios/{version:apiVersion}", Name =  "Envios", Order = 1)]
[Produces("application/json")]
public class ShippingController

现在,当我运行应用程序并生成我的swagger时,您可以看到控制器名称已更改为与route attributes name属性中的文本相同。

参考自:https://www.saoniuhuo.com/question/detail-2169004.html

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Core 6.0中,我们可以使用Swagger来生成API文档,并且可以通过指定控制器的类来更好地组织和展示文档中的接口。 要指定控制器的类,我们可以使用Swagger的注解特性。首先,我们需要在控制器类上添加一个特性`[ApiController]`,这样Swagger就会将该控制器识别为一个API控制器。接下来,我们还可以使用特性`[Route("[controller]")]`来指定API的路由前缀,其中`[controller]`会被替换控制器名称。这样做可以让Swagger自动生成的API路径更加规范和可读。 例如,假设我们有一个名为`UserController`的控制器类,我们可以按照以下方式来指定该控制器的类: ```csharp [ApiController] [Route("[controller]")] public class UserController : ControllerBase { // 控制器的具体实现代码 } ``` 使用上述特性后,Swagger将会按照路由前缀和控制器名称生成相应的API路径。例如,对于`UserController`类中的一个`Get`方法,Swagger将会生成`GET /user`的API路径。 需要注意的是,如果在控制器类上没有指定`[Route]`特性,Swagger将会使用默认的路由规则生成API路径。此外,还可以在具体的方法上添加Swagger特性,例如`[HttpGet]`、`[HttpPost]`等,以指定该方法对应的HTTP请求类型。 总而言之,在.NET Core 6.0中,我们可以通过使用Swagger的注解特性来指定控制器的类,以更好地组织和展示API文档。这样做可以使API文档更加清晰和统一,并且减少手动编写文档的工作量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值