Swagger是這個很是強大的api文檔工具,一般能夠用來測試接口,和查看接口,就像這樣:api
很是的好用和快捷,這是一個小小的demo,咱們在完成系統時,發佈後,外部依舊能夠用/swagger訪問到這個接口文檔,這就形成了系統不安全的問題,那麼咱們應該怎麼辦呢,咱們須要隱藏這些接口。安全
如何隱藏呢,首先咱們須要創建一個新類:工具
namespace TR.Unit { using System; using System.Linq; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Swashbuckle.AspNetCore.Swagger; using Swashbuckle.AspNetCore.SwaggerGen; /// <summary> /// 隱藏接口,不生成到swagger文檔展現 /// </summary> [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] //此特性能夠在方法上和類上使用 public partial class HiddenAttribute : Attribute { } public class HiddenFilter : IDocumentFilter { public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context) { foreach (ApiDescription apiDescription in context.ApiDescriptionsGroups.Items.SelectMany(e => e.Items)) { if (apiDescription.ControllerAttributes().OfType<HiddenAttribute>().Count() == 0 && apiDescription.ActionAttributes().OfType<HiddenAttribute>().Count() == 0) { continue; } var key = "/" + apiDescription.RelativePath.TrimEnd('/'); if (!key.Contains("/test/") && swaggerDoc.Paths.ContainsKey(key)) { swaggerDoc.Paths.Remove(key); } } } } }
首先咱們須要引入 using Swashbuckle.AspNetCore.Swagger; using Swashbuckle.AspNetCore.SwaggerGen;測試
這兩個命名空間,其次咱們須要繼承Attribute 類,方便咱們在須要隱藏的接口中使用隱藏特性,這裏命名能夠隨意,不過仍是直觀一點。spa
而後就須要在你想要隱藏的控制器上加上 [Hidden]就能夠啦,就像這樣code
[Hidden] [Route("Home")] [Authorize] public class HomeController : Controller { /// <summary> /// 主界面 /// </summary> /// <returns></returns> [HttpGet] public IActionResult Home() { return View(); } }
這裏是隱藏控制器下全部的接口,也能夠方法上隱藏,從而暴露一些接口。blog
這就是隱藏Swagger接口的顯示了,下次寫Swagger接口文檔如何分組。繼承