http - 如何在 golang 中使用 "422 Unprocessable Entity (WebDAV)"或任何其他自定义 http 状态代码

标签 http go

go http 包仅支持来自 RFC 2616 的状态代码。许多 REST api(如 github)使用 422 表示错误的输入数据。我也想这样做,但我没有看到这样做的好方法。我看到的选项是

  1. 将源码编辑到http包中并添加。这很容易做到,但不利于编辑核心库。

  2. http.Response 结构具有作为字符串的 Status 作为 int 的 StatusCode。我想我可以在响应中设置它们,但是 http.Handler 只有一个 RespnseWriter 接口(interface)。可以制作一个具有正确设置响应的 RoundTripper 的 http.Transport。即使有可能,这在某种程度上看起来也是一种 hacky。

那么添加自定义 http 状态代码的最佳方式是什么,还是一个坏主意?

最佳答案

由于状态 422 Unprocessable Entity 是 WebDAV 扩展,您可以使用包 golang.org/x/net/webdav并正确处理:

http.Error(w,
    webdav.StatusText(webdav.StatusUnprocessableEntity),
    webdav.StatusUnprocessableEntity)

关于http - 如何在 golang 中使用 "422 Unprocessable Entity (WebDAV)"或任何其他自定义 http 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547945/

相关文章:

go - 使用超时运行命令并在 go 中一次读取一行标准输出

linux - 来自 TCP 套接字的 HTTP 服务器(在 Go 中)

api - 较大响应的 HTTP 状态代码 413/400

C# HttpWebRequest命令获取目录列表

debugging - 如何消除全局变量

testing - 如何在 Go 中使用 gomock 模拟函数?

当状态为 301 且没有 Location header 时,HTTP 客户端不会返回响应

java - 在 Android 中编写许多 HTTP 请求的良好设计模式

http - cookie 和桌面应用程序

html - Revel 中的嵌套模板无法正确加载