我有以下路由器:func testHttp() { r := mux.NewRouter() s := r.PathPrefix("/cmd").Subrouter() s.HandleFunc("/{cmd}", cmd) http.Handle("/", r) http.ListenAndServe(":8090", nil)}當(dāng)我發(fā)出這樣的請(qǐng)求時(shí),localhost:8090/cmd/ls -lacmd 處理程序會(huì)正確執(zhí)行。但是,如果我傳遞類(lèi)似的內(nèi)容,localhost:8090/cmd/ls -la /home/foo我會(huì)得到 404。這意味著 gorilla/mux 在檢測(cè)到 / 時(shí)保持匹配。那么如何配置它,以便特定匹配路徑(在本例中為 /cmd/)之后的所有內(nèi)容都被視為該路徑的參數(shù)?想必我只能求助于使用 GET 參數(shù),但是如果也使用 /rest-endpoint/params-having/ 也可以實(shí)現(xiàn)這一點(diǎn)嗎?
1 回答

瀟瀟雨雨
TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
/ 是 URL 的目錄分隔符,因此 mux 所做的事情是正確的,它分隔和匹配由 / 分隔的段。如果要ls -la /home/foo
作為路徑參數(shù)傳遞,則應(yīng)轉(zhuǎn)義 / 字符,并寫(xiě)入 %2F。然后 mux 將正確運(yùn)行。
另一種選擇是將處理程序安裝到 PathPrefix /cmd/。然后,您必須在處理程序中解析路徑的剩余部分,但您可以按照您想要的方式處理“/”。
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報(bào)
0/150
提交
取消