栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

覆盖ResponseWriter接口以捕获HTTP错误

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

覆盖ResponseWriter接口以捕获HTTP错误

Mux库只有一种设置未找到的处理程序的方法,它为您提供了一种在Mux无法将URL解析为其已知映射的情况下拦截请求的方法。

例如,您这样做:

mux.Handle("/foo",fooFunc)mux.Handle("/bar",barFunc)

但是客户端访问

/baz
的多路复用器没有映射。

他们实际上并没有截取去往客户端的404,而只是在遇到此问题时调用未找到的处理程序。

此外,如果/ foo处理程序发送404响应,则不会调用未找到的响应。

如果您希望自定义页面用于来自映射URL的各种返回响应,只需使各种处理程序编写正确的响应即可。

如果您不控制该逻辑(即:框架正在写东西并且没有覆盖方法),则您可能希望拦截所有请求并使用响应代码检测逻辑覆盖http.ResposeWriter。

这是一个示例拦截器,基本上可以满足您的要求。在播放

package mainimport (    "fmt"    "log")import "net/http"type Interceptor struct {    origWriter http.ResponseWriter    overridden bool}func (i *Interceptor) WriteHeader(rc int) {    switch rc {    case 500:        http.Error(i.origWriter, "Custom 500 message / content", 500)    case 404:        http.Error(i.origWriter, "Custom 404 message", 404)    case 403:        i.origWriter.WriteHeader(403)        fmt.Fprintln(i.origWriter, "Custom 403 message")    default:        i.origWriter.WriteHeader(rc)        return    }    // if the default case didn't execute (and return) we must have overridden the output    i.overridden = true    log.Println(i.overridden)}func (i *Interceptor) Write(b []byte) (int, error) {    if !i.overridden {        return i.origWriter.Write(b)    }    // Return nothing if we've overriden the response.    return 0, nil}func (i *Interceptor) Header() http.Header {    return i.origWriter.Header()}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446449.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号