我有两个继承其他控制器的控制器 - 其中一个会生成 swagger 文档,而另一个则不会。
我的控制器是:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class ActorController : BaseDefControllerLog<Actor> { public ActorController(BaseDefController<Actor> baseController, ILogger<ActorController> logger, IAppConfig appSettings) : base(baseController, logger, appSettings) { } } [Route("ActorCatalog")] public class ActorCatalogController: LoggerController, ICatalogController<Actor> { private readonly BaseDefControllerLog<Actor> _baseController; public ActorCatalogController(BaseDefControllerLog<Actor> baseController, ILogger<ActorCatalogController> logger) : base(logger) { _baseController = baseController; } [Route("GetAll")] [HttpGet] public ICollection<Actor> GetAll(int? pageNumber = null, int? pageSize = null) { //GetAll logic } } |
下面是BaseDefController、BaseDefControllerLog和LoggerController:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | { private readonly IReadManager< T > _manager; public BaseDefController(IReadManager< T > manager) { _manager = manager; } [HttpGet] public virtual ICollection< T > GetAll(int? pageNumber = null, int? pageSize = null) { return _manager.GetAll(pageNumber, pageSize); } } public class BaseDefControllerLog< T >: LoggerController where T : class, IConfigDef { private readonly BaseDefController< T > _baseController; private readonly ILogger<BaseDefControllerLog< T >> _logger; public BaseDefControllerLog(BaseDefController< T > baseController, ILogger<BaseDefControllerLog< T >> logger, IAppConfig appSettings) : base(logger) { _baseController = baseController; _logger = logger; } [HttpGet] public virtual ICollection< T > GetAll(string remoteIpAddress = null, int? pageNumber = null, int? pageSize = null) { //GetAll logic } } public class LoggerController : Controller { protected ILogger Logger; public LoggerController(ILogger logger) { Logger = logger; } public override void OnActionExecuting(ActionExecutingContext context) { //... } public override void OnActionExecuted(ActionExecutedContext context) { //... } } |
"Actor"模型是一个简单的类:
2 3 4 5 6 7 8 | { public int Id { get; set; } public Guid Tag { get; set; } public string Name { get; set; } public DateTime LastUpdated { get; set; } public bool Deleted { get; set; } } |
版本:
Swashbuckle.AspNetCore 1.0.0
重现步骤:
我已经用 Route 属性装饰了 ActorController 和 ActorCatalogController 。此时swagger在生成json的时候会抛出异常。如果我删除 ActorController 上的路由并因此仅为 ActorCatalogController 生成文档,一切正常。如果我用路由属性装饰继承的控制器的动作,我也会在 json 上得到 500 响应。我也尝试删除 virtual 关键字,但没有运气。
预期结果:
两个控制器(ActorCatalogController 和 ActorController)的文档。
实际结果:
500 : http://localhost:4100/swagger/v1/swagger.json
无法生成 JSON。我发现了这个异常:"Exception throw: \\'System.NotSupportedException\\' in Swashbuckle.AspNetCore.SwaggerGen.dll".
额外细节
我的项目的目标框架是 .NET 框架 4.6.2。我使用 Microsoft.AspNetCore 1.1.2 和 Microsoft.AspNetCore.Hosting.WindowsServices 1.1.2。
我在 Startup.cs 中的招摇配置如下:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | { services .AddMvc(config => { config.RespectBrowserAcceptHeader = true; }) .AddJsonOptions(options => { options.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; }) .AddXmlSerializerFormatters(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title ="InternalServer", Version ="v1" }); }); InitializeContainer(services); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseMvc(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("v1/swagger.json","SwaggerDemo V1"); }); LogRegistration(loggerFactory); } |
我解决了这个问题,有关解决方法的更多详细信息,请点击此处:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/511
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)