Giter Site home page Giter Site logo

pda-team / panda.dynamicwebapi Goto Github PK

View Code? Open in Web Editor NEW
579.0 579.0 143.0 162 KB

ASP.NET Core Dynamic Restful WebApi. Generating WebApi from Classes. Such as: Direct Generation of WebApi Based on Business Logic Layer.

License: Apache License 2.0

C# 96.16% PowerShell 3.84%
asp-net-core dynamic-webapi

panda.dynamicwebapi's People

Contributors

2594771947 avatar hueifeng avatar senewjax avatar staneee avatar stulzq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

panda.dynamicwebapi's Issues

swagger生成错误

产生原因:继承仓储服务

/// <summary>
/// 用户服务
/// </summary>
[ApiExplorerSettings(GroupName = "user")]
[DynamicWebApi]
public class UserService : BaseRepository<User>, IDynamicWebApi
{
    /// <summary>
    /// 添加用户
    /// </summary>
    /// <returns></returns>
    [HttpPost]
    public async Task AddUser(UserRegisterRequestDto dto)
    {
        var user = new User()
        {
            Account = dto.Account,
            UserName = dto.UserName,
            Password = dto.Password,
        };
        await InsertAsync(user);
    }
}

public class BaseRepository : SimpleClient where T : class, new()
{
public BaseRepository(ISqlSugarClient? context = null) : base(context)
{
base.Context=context;
}
}

只要继承BaseRepository swagger就出不来了,难道只能构造注入一下?

Autofac 动态代理 AOP 失效

服务层方法,自动生成API 成功,原来在服务层方法上 用Autofac 实现了AOP,现在失效了,请问怎么处理?急解决!!!感谢大佬

无法识别Delete开头的接口实现方法

/// <summary> /// 删除用户信息 /// </summary> /// <param name="input"></param> /// <returns></returns> Task DeleteUser(User input);
运行项目构建Swagger文档时,构建失败!
打开页面是错误信息如下:
Failed to load API definition.
Errors
Hide

Fetch errorInternal Server Error /swagger/v1/swagger.json

是否支持多版本控制?

非常感谢您提供这么棒的自动生成接口的库。由于我们的产品是SaaS和聚合API模式,每一个版本都有很多用户,也就涉及到多版本控制,目前我们通过Swagger+微软的api version来实现多版本控制的。

请问您这个是否可以做到多版本配置?

Get请求一切正常,但是Post 请求返回400

请教各位道友,帮忙看下可能是哪里问题,不胜感激!
后台改来改去,不见效果,Swagger UI 页面测试也是一样,
我就在 $.ajax 上修修改改,有时候会返回个 415.。。

我在 OrchardCore项目中使用 Panda.DynamicWebApi 包,
前者是一个多模块多租户的CMS系统,它包含了授权等功能
我在A模块中创建了一个基类 用于处理所有 AppService
然后在B模块中的Service继承这个类

基类签名如下:

 [DynamicWebApi]
    public class AppServcieBase : IAppServcieBase, IDynamicWebApi
    {
    }

在该模块的 Startup 中做了如下处理 (注意:这里是模块的Startup,不是主项目的Startup,它是一个模块的启动器)

 public class Startup : StartupBase
    {
        private readonly IShellConfiguration _shellConfiguration;
        public Startup(IShellConfiguration shellConfiguration)
        {
            _shellConfiguration = shellConfiguration;
        }
        public override void ConfigureServices(IServiceCollection services)
        {
           
            services.AddAutoMapper(GetType().Assembly);
            AppServcieBase.ServiceProvider = services.BuildServiceProvider();
            ////自定义配置
            services.AddDynamicWebApi((options) =>
            {
                // 指定全局默认的 api 前缀
                options.DefaultApiPrefix = "api";
                //options.ActionRouteFactory = new ServiceActionRouteFactory();

            });
            // 注册Swagger生成器,定义一个和多个Swagger 文档
            services.AddSwaggerGen(options =>
            {
                options.CustomSchemaIds(type => type.FullName);
                options.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo()
                { Title = " Dynamic WebApi", Version = "v1" });
                //options.SchemaGeneratorOptions.
                // TODO:一定要返回true!
                options.DocInclusionPredicate((docName, description) => true);

                var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
                var xmlDocFiles = Directory.GetFiles(baseDirectory, "*.xml");
                foreach (var xmlFile in xmlDocFiles)
                {
                    var asName = Path.GetFileNameWithoutExtension(xmlFile);
                    if (File.Exists(Path.Combine(baseDirectory, asName + ".dll")))
                    {
                        var xmlPath = Path.Combine(baseDirectory, xmlFile);

                        options.IncludeXmlComments(xmlPath);
                    }
                } 
            });
        }

B模块中的AppService 如下 ,Swagger API也能正常显示,Get请求交互也都没问题。

[DynamicWebApi] //加不加都一样
public class RDBMSAppService : AppServcieBase, IRDBMSAppService, IDynamicWebApi //接口也是加不加都一样
{
    //这个方法无法使用 POST 请求
     public async Task<bool> AlterContentTypeAsync(ImportJsonInupt model){
      return false;
    }

}

我尝试自己创建一个 ApiController ,执行起来没有任何问题。

Swagger生成错误

产生原因:继承仓库服务
/// <summary> /// 用户服务 /// </summary> [ApiExplorerSettings(GroupName = "user")] [DynamicWebApi] public class UserService : BaseRepository<User>, IDynamicWebApi { /// <summary> /// 添加用户 /// </summary> /// <returns></returns> [HttpPost] public async Task AddUser(UserRegisterRequestDto dto) { var user = new User() { Account = dto.Account, UserName = dto.UserName, Password = dto.Password, }; await InsertAsync(user); } }

只要继承BaseRepository swagger就出不来了,难道只能构造注入一下?

分层

试了下好像只能将Service写在MVC项目下,那如果我有另外一个层,写Service,好像不能动态生成?

不支持版本控制

试了下不支持多版本控制,如:/api/v1/service1,
/api/v2/service1,
我看了下abp的代码好像有个AddAbpApiVersioning,可以研究下把它引进来,不然没法用

请问关于授权认证的问题

您好,我新建了一个.net core 3.1 web程序,并引用了panda.dynamicwebapi,采用了abp的设计理念,将动态api类放置了Application层里面,站点默认开启的是cookie认证,在Application层实现IDynamicWebApi的服务类中,标记了[Authorize],也起到了cookie拦截的作用。

现在有个外部客户端需要调用动态api里面的接口,这个时候就要考虑使用jwt认证,之前有做过webapi的 jwt的认证,不过混合在一起使用的话,需要指定认证类型才可以
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)],那么动态生成的webapi接口中,同一个方法要怎么实现 既支持cookie,又支持jwt方式呢?

真没必要禁止我回帖!!!!我们只是技术讨论

你问我为什么abp vnext切换成了新模式,那是因为它选择放弃了传统的不是前后端分离开发,而我的意思是保留了原有的和现在的模式。两种都支持!

这个issue你无需回复了!我对你的技术表示认可,但对你刚刚关闭Issue的行为觉得非常可耻!

是否支持配置模板

1.接口有的参数是从Controller 基类获取,是否可配置?
2.构造函数注入方式?

无法识别Delete开头的接口实现方法

/// <summary> /// 删除用户信息 /// </summary> /// <param name="input"></param> /// <returns></returns> Task DeleteUser(User input);
运行项目构建Swagger文档时,构建失败!
打开页面是错误信息如下:
Failed to load API definition.
Errors
Hide

Fetch errorInternal Server Error /swagger/v1/swagger.json

能否保留方法名的前辍?

比如我有两个方法:
1,GetUser
2,CreateUser
你这个API就解析成了/api/user/user,一个GET ,一个post而已,这样使用是没什么问题,但感觉就是有点别扭,或者做成可配置的也可以

你好,请教一下

你好,首先感谢分享!示例代码可以完整运行。对此,我有些疑问,在abp架构**中,业务逻辑是在application中完成的,也就是application是单独的一个类库,并非是把AppleAppService 和 IApplicationService 放在 webapi项目中的。另外我再请教一下,Framework平台下是否能够单独实现DynamicWebApi?我尝试着将framework平台下abp里面的动态api分离出来,但是好像不行。。。

如何给返回值统一增加一个壳子

比如我的返回值只是一个 int, 现在返回的Body是 1,但实际Api应该返回调用结果,以及错误信息
我需要Api 返回的是包含一个状态标记的 Flag,以及一个 Data ,真正的返回数据,如下
{ Flag: true, Data:1 }
我看到可以定义方法的属性标签 ProducesResponseType ,但实际上接口太多,无法逐个去修改,有什么好的方式?

模型验证问题

在WebApi中,ModelState.IsVaild会自动执行,但是通过动态WebApi后ModelState.IsVaild验证功能没有启用。

设置HTTP动词问题

89257879-9c3e8d80-d659-11ea-8c6b-18b23e42f469

这个能不能改成可配置的?还有能不能不去掉关键字,比如 CreateApple就是完整的CreateApple

使用了services.AddDynamicWebApi()这个默认配置后启动报错

按照源码默认运行时,在Service中继承了IDynamicWebApi的服务类并没有生成swagger文档

改用services.AddDynamicWebApi()时,启动报错:
Microsoft.AspNetCore.Hosting.Diagnostics[6]
Application startup exception
System.NullReferenceException: Object reference not set to an instance of an object.
at Panda.DynamicWebApiSample.Dynamic.ServiceActionRouteFactory.CreateActionRouteModel(String areaName, String controllerName, ActionModel action) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\samples\Panda.DynamicWebApiSample\Dynamic\ServiceActionRouteFactory.cs:line 17
at Panda.DynamicWebApi.DynamicWebApiConvention.CreateActionRouteModel(String areaName, String controllerName, ActionModel action) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\src\Panda.DynamicWebApi\DynamicWebApiConvention.cs:line 345
at Panda.DynamicWebApi.DynamicWebApiConvention.NormalizeSelectorRoutes(String areaName, String controllerName, ActionModel action) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\src\Panda.DynamicWebApi\DynamicWebApiConvention.cs:line 321
at Panda.DynamicWebApi.DynamicWebApiConvention.ConfigureSelector(String areaName, String controllerName, ActionModel action) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\src\Panda.DynamicWebApi\DynamicWebApiConvention.cs:line 233
at Panda.DynamicWebApi.DynamicWebApiConvention.ConfigureSelector(ControllerModel controller, DynamicWebApiAttribute controllerAttr) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\src\Panda.DynamicWebApi\DynamicWebApiConvention.cs:line 212
at Panda.DynamicWebApi.DynamicWebApiConvention.ConfigureDynamicWebApi(ControllerModel controller, DynamicWebApiAttribute controllerAttr) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\src\Panda.DynamicWebApi\DynamicWebApiConvention.cs:line 83
at Panda.DynamicWebApi.DynamicWebApiConvention.Apply(ApplicationModel application) in C:\Users\Administrator\Downloads\Panda.DynamicWebApi-master\Panda.DynamicWebApi-master\src\Panda.DynamicWebApi\DynamicWebApiConvention.cs:line 45

基于.net core3.1并且升级到最新版本,异步方法无法调用

平台版本是.net core3.1,DynamicWebApi升级到了1.0.3
在测试时候发现异步方法动态api失效了,请求会全部返回415状态,经过测试复现的情况如下:
1、前提条件是使用的异步方法,返回值是 async Task或者直接Task
2、第二个条件是必须有对象类型的参数
以自带的demo为例,:

public IEnumerable<string> GetAllAsync(UpdateAppleDto dto);
public IEnumerable<string> GetAllAsync(int id);
public async Task<IEnumerable<string>> GetAllAsync(int id);

这几种写法都是正常的,但如果使用下面的写法,则均不可用

public async Task<IEnumerable<string>> GetAllAsync(UpdateAppleDto dto);

Swagger生成错误

产生原因:继承仓库服务
/// <summary> /// 用户服务 /// </summary> [ApiExplorerSettings(GroupName = "user")] [DynamicWebApi] public class UserService : BaseRepository<User>, IDynamicWebApi { /// <summary> /// 添加用户 /// </summary> /// <returns></returns> [HttpPost] public async Task AddUser(UserRegisterRequestDto dto) { var user = new User() { Account = dto.Account, UserName = dto.UserName, Password = dto.Password, }; await InsertAsync(user); } }

只要继承BaseRepository swagger就出不来了,难道只能构造注入一下?

如果禁用配置说明第7条

默认会根据你的方法名字来设置HTTP动词,如 CreateApple 或者 Create 生成的API动词为 POST,对照表如下,若命中(忽略大小写)对照表那么该API的名称中的这部分将会被省略,如 CreateApple 将会变成 Apple,如未在以下对照表中,将会使用默认动词 POST

我有个方法是getbyid,改了以后变成byid,我想还是用getbyid,请问如何禁用该设置;

建议生成描述文档

 // options.IncludeXmlComments(@"bin\Debug\netcoreapp2.2\Panda.DynamicWebApiSample.xml");
options.IncludeXmlComments($"{Assembly.GetExecutingAssembly().GetName().Name}.xml");

同时重新生成“xml”描述文件

关于swagger的问题

111

大神好~ 我这里报了这两个错,swagger是通过nuget装的Swashbuckle.AspNetCore.Swagger
core版本为2.2

222

333

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.