搭建.net core api

1 .创建WebAPI 支持docker ;

2 .创建DTO IService  Service ,nuget 添加 panada.dynamicWebApi

3.在Api中配置Swagger,注意以下几点 

(1) services.AddDynamicWebApi(); 添加动态WebApi 需放在 AddMvc 之后;

(2) Swagger 版本问题,我用的是3.1 所以我用的是swashbuckle 5.0.0-rc5(这块一定要注意,耽误好长时间);

   (3)  配置注释xml

(4)代码配置

             //注册Swagger生成器,定义一个和多个Swagger 文档
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1.1", new OpenApiInfo
                    {
                        Title = "My API",
                        Version = "v1.1",
                        Description = "API文档描述",
                    });
// (1)可以这样(动态)
                    c.DocInclusionPredicate((docName, description) => true);
                    foreach (var item in XmlCommentsFilePath)
                    {
                        c.IncludeXmlComments(item);
                    }
//(2) 也可以这样(静态)
//获取代码运行的相对路径
                    // var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
//插入代码上的注释放入Swagger
                    //c.IncludeXmlComments(Path.Combine(basePath, "Service.xml"));
                    //c.IncludeXmlComments(@"bin\Debug\netcoreapp3.1\webapitest1.xml");
                    //c.IncludeXmlComments(@"bin\Debug\netcoreapp3.1\Service.xml");



                });
            /**/
            //启用Swagger
            app.UseSwagger();
            //配置Swagger UI
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1.1/swagger.json", "My API"); //注意中间段v1要和上面SwaggerDoc定义的名字保持一致
            });
            /**/

(5)可能出现的问题:

 

System.InvalidOperationException:“The action 'Service.AreaStatNumService.GetDataSource (Service)' has ApiExplorer enabled, but is using conventional routing. Only actions which use attribute routing support AiExplorper.”

解决: 这个就是版本问题了,因为.netcore 3.0 以后统一使用全局的OpenApi了

参考地址:(https://docs.microsoft.com/zh-cn/aspnet/core/web-api/microsoft.dotnet-openapi?view=aspnetcore-3.1 "使用 OpenAPI 工具开发 ASP.NET Core 应用")

4.配置全局标签 

(1)配置异常标签,可以根据自己需要配合log使用

 public class ApiExceptionFilterAttribute : ExceptionFilterAttribute
    {


        public override void OnException(ExceptionContext context)
        {
            context.Result = BuildExceptionResult(context.Exception);
            base.OnException(context);
        }

        /// <summary>
        /// 包装处理异常格式
        /// </summary>
        /// <param name="ex"></param>
        /// <returns></returns>
        private JsonResult BuildExceptionResult(Exception ex)
        {
            //应用程序业务级异常
            //Logger.Error(ex.Message);
            return new JsonResult(new ApiModelsBase()
            {
                code = ((int)HttpStatusCode.InternalServerError).ToString(),
                msg = ex.Message
            }
            );
        }

    }

(2) 配置统一返回值格式标签

    public class CustomActionFilter : ActionFilterAttribute, IActionFilter
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            //模型验证
            if (!context.ModelState.IsValid)
            {
                throw new ApplicationException(context.ModelState.Values.First(p => p.Errors.Count > 0).Errors[0].ErrorMessage);
            }
            base.OnActionExecuting(context);
        }


        /// <summary>
        /// 处理正常返回的结果对象,进行统一json格式包装
        /// 异常只能交由ExceptionFilterAttribute 去处理 
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            if (context.Result != null)
            {
                var result = context.Result as ObjectResult;
                JsonResult newresult;
                if (context.Result is ObjectResult)
                {
                    newresult = new JsonResult(new ApiModelsBase
                    {
                        code = ((int)HttpStatusCode.OK).ToString(),
                        msg = "",
                        data = result.Value
                    });
                }
                else if (context.Result is EmptyResult)
                {
                    newresult = new JsonResult(new ApiModelsBase()
                    {
                        code = ((int)HttpStatusCode.OK).ToString()
                        ,
                        msg = "",
                        data = new { }
                    });
                }
                else
                {
                    throw new Exception($"未经处理的Result类型:{ context.Result.GetType().Name}");
                }
                context.Result = newresult;
            }
            base.OnActionExecuted(context);
        }
    }

也可以配置权限验证标签等,根据自己需求添加相应功能;

一个简单的小框架搭完了(记性不好,完全为了以后方便会议)。

ORM是自己写的,虽然BUG不少,逻辑问题也挺多,而且对数据库的兼容现在只有oracle he sqlserver ,慢慢拓展吧,就不往上show了。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基本的 .NET Core Web API 的示例: 1. 打开 Visual Studio 9 2. 选择 "新建项目" 3. 在 "新建项目" 窗口中,选择 "ASP.NET Core Web 应用程序" 4. 命名你的应用程序,并选择 "API" 作为项目类型 5. 点击 "创建" 现在你已经有了一个基本的 .NET Core Web API 项目。接下来,我们需要创建一个控制器来处理 HTTP 请求。按照以下步骤操作: 1. 在解决方案中,右键单击 "Controllers" 文件夹 2. 选择 "添加" -> "新建项" 3. 在 "新建项" 窗口中,选择 "ASP.NET Core" -> "控制器类" 4. 命名你的控制器,并选择 "API Controller - 空" 作为模板 5. 点击 "添加" 现在你已经有了一个控制器类。在这个类中,你可以定义可以处理 HTTP 请求的方法。例如,以下是一个简单的控制器类,它包含一个 Get 方法,该方法返回一个字符串: ```csharp using Microsoft.AspNetCore.Mvc; [ApiController] [Route("[controller]")] public class HelloWorldController : ControllerBase { [HttpGet] public string Get() { return "Hello, World!"; } } ``` 这个控制器类使用了两个属性:`[ApiController]` 和 `[Route("[controller]")]`。这些属性告诉 ASP.NET Core,这是一个 API 控制器,并且这个控制器的路由前缀应该是控制器的名称。 现在你可以运行你的应用程序,并在浏览器中访问 `https://localhost:5001/helloworld`,你应该可以看到 "Hello, World!" 的输出。 这只是一个简单的例子,但它演示了如何创建一个基本的 .NET Core Web API。你可以在控制器类中定义更多的方法来处理不同的 HTTP 请求,并返回不同的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值