我想使用 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)
Run Code Online (Sandbox Code Playgroud)
问题是:只有 GET /swagger-ui/ 返回 swagger 页面。当我执行(大多数用户也期望)没有斜杠的 GET /swagger-ui 时,我得到 404。
如何解决这个问题?
您可能已经找到了答案,因为这个问题已经有近两年的历史了,但我将在这里写下答案,以便任何遇到这个问题的人都可以看到它。
您只需将 Gorilla 路由器定义为:
router := mux.NewRouter().StrictSlash(true)
StrictSlash func(value bool) *Router StrictSlash 定义新路由的尾部斜杠行为。初始值为假。
当为 true 时,如果路由路径是“/path/”,则访问“/path”将执行到前者的重定向,反之亦然。换句话说,您的应用程序将始终看到路由中指定的路径。
当为 false 时,如果路由路径为“/path”,则访问“/path/”将不会匹配该路由,反之亦然。
重定向是 HTTP 301(永久移动)。请注意,当为具有非幂等方法(例如POST、PUT)的路由设置此项时,大多数客户端将随后的重定向请求作为GET 发出。使用中间件或客户端设置根据需要修改此行为。
特殊情况:当路由使用 PathPrefix() 方法设置路径前缀时,该路由将忽略严格斜杠,因为无法仅根据前缀确定重定向行为。但是,从该路由创建的任何子路由器都会继承原始的 StrictSlash 设置。
| 归档时间: |
|
| 查看次数: |
1558 次 |
| 最近记录: |