Iris 路由设置动态路由参数后,会导致跨域问题,原因不详

Iris 路由设置动态路由参数后,会导致跨域问题,原因不详~

哪位大神知道原因的,指点下。。。

// 以下 5 个路由同时出现时,详情、编辑、删除这三个接口会出现跨域问题,
// 去掉动态路由参数校验 `uint64` 后,就能解决跨域问题!

var Router = initRouter()

// 跨域处理
func initRouter() *iris.Application {
    router := iris.New()
    router.Use(func(ctx iris.Context) {
        ctx.Header("Access-Control-Allow-Origin", "*")
        ctx.Header("Access-Control-Allow-Credentials", "true")
        ctx.Header("Access-Control-Allow-Headers", "*")
        ctx.Header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, X-Access-Token,Token")
        ctx.Header("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")

        if ctx.Method() == "OPTIONS" {
            ctx.StatusCode(http.StatusOK)
            return
        }

        ctx.Next()
    })
    router.AllowMethods(iris.MethodOptions)
    return router
}

// 列表
Router.Get("answer", xxx.getList)

// 详情
Router.Get("answer/{id:uint64}", xxx.getDetail) // 加上动态路由参数会导致跨域

// 新建
Router.Post("answer", xxx.createAnswer)

// 编辑
Router.Put("answer/{id:uint64}", xxx.updateAnswer) // 加上动态路由参数会导致跨域

// 删除
Router.Delete("answer/{id:uint64}", xxx.deleteAnswer) // 加上动态路由参数会导致跨域
编程就像呼吸,学会那天起一日不敢荒废。
ZsmHub
讨论数量: 4

没看过lirs,不懂,不会,不明白,我是来打酱油的

3年前 评论

我也遇到这个问题了,不带参数可以正常访问,带参数的时候 就显示跨域了,大佬 你这个问题解决了吗?

3年前 评论
ZsmHub (楼主) 3年前

ctx.StatusCode(http.StatusOK) 这里不对 ,跨域允许options应该返回204.

辣鸡iris连cors中间件都没吗?

3年前 评论
CyJay 3年前
pardon110

据说在版本master v12.2.0 主分支中已经被修复,产生原因 动态路径类型断言时不恰当的处理引起,升级试试

$ cd YOUR_PROJECT_PATH
$ go get -u github.com/kataras/iris/v12@master
$ go run .
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!