我想使用gorilla / mux和http.FileServer来提供swagger-ui。
这是迄今为止有效的路由:
router := mux.NewRouter()
router.PathPrefix("/swagger-ui/").Handler(http.StripPrefix("/swagger-ui/",
http.FileServer(http.Dir("swagger-ui/"))))
http.ListenAndServe(":8080", router)
问题是:只有GET / swagger-ui /返回swagger页面。 当我(大多数用户也期待)GET / swagger-ui没有尾随斜线时,我得到404.
如何解决这个问题?
答案 0 :(得分:0)
您可能已经找到答案了,因为该问题已有将近两年的历史了,但是我将在此处写下答案,以便遇到此问题的任何人都可以看到它。
您只需要将大猩猩路由器定义为:
router := mux.NewRouter().StrictSlash(true)
StrictSlash func(value bool)*路由器StrictSlash定义了结尾 削减新路线的行为。初始值为false。
为true时,如果路由路径为“ / path /”,则访问“ / path”将 执行重定向到前者,反之亦然。换句话说,您的 应用程序将始终看到路由中指定的路径。
为false时,如果路由路径为“ / path”,则不会访问“ / path /” 匹配此路线,反之亦然。
重定向是HTTP 301(永久移动)。请注意,当 为使用非幂等方法(例如POST,PUT)的路由设置了 大多数客户将随后的重定向请求作为GET发出。 使用中间件或客户端设置根据需要修改此行为。
特殊情况:当路由使用PathPrefix()设置路径前缀时 方法,该路由会忽略严格的斜杠,因为重定向 行为不能仅通过前缀来确定。但是,任何 从该路由创建的子路由器继承原始StrictSlash 设置。