Tag: swagger

如何使用swagger swashbuckle保护生成的API文档

我已经使用swagger swashbukle实现了API文档。 现在我想在我的网站上发布生成的文档作为帮助文件。 如何保护此链接并发布?

Swagger 2.0不支持:带路径的多个操作

我在WebApi 2应用程序中集成了swagger。 应用程序有单个控制器时,它工作正常。 当我在应用程序中添加第二个控制器时。 我收到了以下错误: 发生错误。“,”ExceptionMessage“:”Swagger 2.0不支持:路径’api / Credential’和方法’GET’的多个操作。 请参阅配置设置 – \“ResolveConflictingActions \”以获取潜在的解决方法“,”ExceptionType“:”System.NotSupportedException“,”StackTrace“:”在Swashbuckle的Swashbuckle.Swagger.SwaggerGeneratorOptions.DefaultConflictingActionsResolver(IEnumerable 1 apiDescriptions)\r\n at Swashbuckle.Swagger.SwaggerGenerator.CreatePathItem(IEnumerable 1 apiDescriptions,SchemaRegistry schemaRegistry)\ r \ n在Swashbuckle.Swagger.SwaggerGenerator。 c__DisplayClass7.b__4(IGrouping 2 group)\r\n at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable 1 source,Func 2 keySelector, Func 2 elementSelector,IEqualityComparer 1 comparer)\r\n at Swashbuckle.Swagger.SwaggerGenerator.GetSwagger(String rootUrl, String apiVersion)\r\n at Swashbuckle.Application.SwaggerDocsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, […]

将Iso8601TimeSpanConverter添加到JsonConverter列表会抛出ArrayTypeMismatchexception

我正在使用AutoRest从Swagger定义文件中为REST API自动生成ac#类。 问题是当执行客户端类初始化方法时,它会在以下代码中抛出ArrayTypeMismatchexception: SerializationSettings = new JsonSerializerSettings { Formatting = Formatting.Indented, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Utc, NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Serialize, ContractResolver = new ReadOnlyJsonContractResolver(), Converters = new List { new Iso8601TimeSpanConverter() } } 令人讨厌的代码是添加到JsonConverters列表中的Iso8601TimeSpanConverter。 顺便说一句,这只发生在VSIX包中运行此代码时。 在独立的应用程序上,它工作正常。 我想知道它是否与多个版本的Newtonsoft.Json加载和碰撞有关? 有任何想法吗?

ASP.NET Core中的路由消歧(MVC 6)

当ASP.NET Core遇到含糊不清的命名路由时,它变得惰性。 也就是说,应用程序将在没有抛出exception的情况下运行,但是,它将无法在任何控制器上处理任何请求。 主叫客户端收到500个响应。 我将展示我是如何陷入这个烂摊子的,我想知道如何修复它。 我有一个看起来像这样的控制器: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] public class AddressesController : Controller { [HttpGet(“{aid}”, Name = “PostalLink”)] public async Task GetAddress(Guid id, Guid aid) { //…implementation is irrelevant for this question. } [HttpPost] [SwaggerResponseRemoveDefaults] [SwaggerResponse(HttpStatusCode.Created, Type = typeof(PostalRecord))] public async Task CreateAddress(Guid id, [FromBody] PostalAddress address) { address.ID = Guid.NewGuid(); await createAddress.Handle(address); return CreatedAtRoute(“PostalLink”, […]

如何使用Swagger生成选项(CORS)

对于我们正在开发的项目,我们自动生成Swagger文件。 但是现在我们正在努力研究CORS部分。 我们正在使用Amazon API网关导入apifunction。 要与Swagger和CORS结合使用,我们必须在源代码中创建一个额外的操作(操作),它允许每个api方法(操作)的CORS(选项)! 例如: [HttpOptions] [Route(“{id}”)] [ProducesResponseType((int)HttpStatusCode.OK)] public IActionResult UserOptions() { return new OkResult(); } 正如您所看到的,这会使代码变得更脏。 这是一个临时修复,但我们找不到另一种方法。 有没有办法在swagger定义文件中自动生成这个? 或者我们如何做到这一点,亚马逊API网关需要这个(文档: http : //docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html )

有没有办法从预先编写的C#Azure Functions自动生成Swagger标签?

是否有人知道任何.NET属性可用于注释预编译的C#Azure函数,以便它可以自动生成Swagger标记? 例如,我想在Swagger中自动生成“tags”条目: /api/v1/revision: get: operationId: /api/v1/revision/get tags: – System produces: [] consumes: [] parameters: [] description: Gets the API version responses: ‘200’: description: Success operation security: – apikeyQuery: [] 这是我的C#函数: public static class VersioningService { [FunctionName(“ApiVersion”)] public static async Task ApiVersion([HttpTrigger(AuthorizationLevel.Function, “get”, Route = “v1/revision”)]HttpRequestMessage req, TraceWriter log) { return req.CreateResponse(HttpStatusCode.OK, “API Version: 1.0340”); } […]

列出多个组下的API方法

我有Swashbuckle带注释的代码,如下所示: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] public class AddressesController : Controller { [HttpGet(“{aid}”)] [SwaggerResponse(HttpStatusCode.OK, Type = typeof(PostalRecord))] public async Task GetAddress(Guid id, Guid aid) { //do something } 我想使用GroupActionsBy自定义,如本例所示 ,但我希望将上面的GetAddress方法同时包含在两个独立的组中,这些组对应于显示的两个路由前缀: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] 换句话说,我希望在两者下列出相同的方法: 认购 组织 如何才能做到这一点? 顺便说一下,我正在使用ASP.NET Core( dnx46 )。 如果还不能使用Swashbucklee的ASP.NET核心版本执行此操作,那么仍然可以欣赏完整的CLR(Web API 2.2?)示例。 另外,关于我正在尝试做的更完整的故事 – 我有一个单独的SOpost 。 更新 @venerik给出的答案让我接近解决方案。 当我申请他的示例代码时…… [SwaggerOperation(Tags = new []{“Subscribers”, “Organizations”})] …这导致Swagger列表看起来像这样: 简而言之,“地址”端点现在出现在我想要的标题下,但是,正如红色箭头所示,它们现在也被“交叉列出”; 我不希望“订户”端点列在“组织”端点下。 […]

Web API:使用不同HTTP谓词的相同方法

在WEB API控制器中,我们可以使用不同的HTTP谓词具有相同的方法名称吗? [HttpGet] public string Test() { return “Success Get”; } [HttpPost] public string Test(int i) { return “Success Post”; } Swagger不接受此配置。 访问API方法时出现此错误: 500:“消息”:“发生错误。”,“ExceptionMessage”:“Swagger 2.0不支持:路径’api / Common’和方法’POST’的多个操作。请参阅配置设置 – \”ResolveConflictingActions \“一个潜在的解决方法“ 这是我的routeconfig : config.Routes.MapHttpRoute( name: “DefaultApiByName”, routeTemplate: “api/{controller}/{action}/{name}”, defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: “DefaultApiByAction”, routeTemplate: “api/{controller}/{action}” ); config.Routes.MapHttpRoute(“DefaultApi”, “api/{controller}/{id}”, new { […]

当Authorize标记不包含角色时,我没有获得范围复选框,Ajax授权请求也没有发送范围

更新2:如果我从这里更改我的控制器授权标签 [Authorize] 对此 [Authorize(Roles = “Read”)] 然后我得到范围选择的复选框,ajax令牌请求包含正确的范围并成功完成。 然而,我仍然以红色感叹号结束。 看起来Swagger或Swashbuckle要求角色与范围定义匹配? 使用Swashbuckle时是否可以使用没有定义角色的应用程序流程? 如果是这样,你怎么做到这一点? 我是否必须在操作filter类中手动设置范围? 如果在Authorize标记中没有列出Roles就无法使用Swashbuckle,那么我需要知道如何在IdentityServer3中分配客户端角色。 更新3如果我将操作filter更改为类似的范围,则会显示范围,但在选择范围并单击“授权”后,页面将重新加载。 首先成功发送了ajax授权。 这是更接近,但授权仍然没有坚持(不知道在这里使用什么术语,但坚持似乎总结了。)我如何获得授权坚持? public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { var scopes = new List() { “Read” }; if (scopes.Any()) { if (operation.security == null) operation.security = new List<IDictionary<string, IEnumerable>>(); var oAuthRequirements = new Dictionary<string, IEnumerable> { { “oauth2”, scopes […]

如何使用Azure Active Directory授权使用Azure REST API应用程序

我已经为Azure部署了一个API App ,但是如果身份validation(使用AAD)设置为ON,我在创建API客户端时遇到问题。 当我尝试生成服务客户端时(当身份validation为OFF时),然后生成客户端代码(使用Autorest完成)并且代码正在运行,但是当我将身份validation设置为ON时(以及当请求未经过身份validation时要执行的操作设置为Login with Azure Active Directory然后, Login with Azure Active Directory ) 1)服务呼叫返回401 Unauthorized (无需重定向到AAD登录页面) 2)然后我尝试再次生成服务客户端(从Project的上下文菜单 – >添加 – > REST API客户端 – >然后在我选择的对话框中选择“选择Azure资产”并按下确定并收到消息”Failed to download metadata file for Microsoft Azure API App: …app name…” (和”没有其他可用信息“) 我根据Azure手册(使用快速设置)实现了AAD: https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-active-directory-authentication/ 正在根据这个video工作,这个video中显示的所有内容都在工作,除了AAD没有被certificate……对我来说它不起作用…… https://azure.microsoft.com/en-us/documentation/videos/connect-2015-what-s-new-in-app-service-api-apps/ 有什么建议? 编辑 1)如果我在Web浏览器中输入请求URL(REST API客户端使用) – 然后它返回有效结果2)我发现我使用的是没有凭据的REST API(我认为在这种情况下应该提供Azure AD登录屏幕……但它不是) 编辑2 我得到了一些进展 – 进入AAD登录界面,但输入凭据后我获得了bearer token […]