Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用;422不可处理实体(WebDAV)“;或golang中的任何其他自定义http状态代码_Http_Go - Fatal编程技术网

如何使用;422不可处理实体(WebDAV)“;或golang中的任何其他自定义http状态代码

如何使用;422不可处理实体(WebDAV)“;或golang中的任何其他自定义http状态代码,http,go,Http,Go,go http包仅支持来自RFC 2616的状态代码。许多REST API(如github)使用422处理错误的输入数据。我也想这样做,但我不认为在围棋中这样做有什么好方法。我看到的选择是 编辑http包的源代码并将其添加。这很容易做到,但编辑核心库却不好 Response结构的Status是字符串StatusCode,是int。我想我可以在Response中设置它们,但是http.Handler只有respneswriter接口。可能会创建一个http.Transport,该Transport

go http包仅支持来自RFC 2616的状态代码。许多REST API(如github)使用422处理错误的输入数据。我也想这样做,但我不认为在围棋中这样做有什么好方法。我看到的选择是

  • 编辑http包的源代码并将其添加。这很容易做到,但编辑核心库却不好

  • Response结构的Status是字符串StatusCode,是int。我想我可以在Response中设置它们,但是http.Handler只有respneswriter接口。可能会创建一个http.Transport,该Transport具有正确设置响应的往返程序。即使有可能,在某种程度上,这似乎是一个骇客


  • 那么,添加自定义http状态代码的最佳方法是什么,或者这只是一个坏主意

    您可以将状态代码作为http.Error()的参数手动插入:

    这将返回状态422和响应“一些响应文本”


    是指向文档中此功能的链接。

    由于状态
    422不可处理实体
    是WebDAV扩展,您可以使用该软件包并正确处理它:

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

    为什么不能使用任意状态码?为什么不直接调用ResponseWriter上的WriteHeader(422)?如果这样做,http响应看起来像“http/1.1 422状态代码422”。我希望它是“HTTP/1.1 422不可处理的实体”,我认为这是值得的,但我也认为你是对的,现在没有简单的方法可以做到这一点。您需要能够在此映射中添加一个条目:可能提交一个功能请求,现在只修补库?http.Error只是将字符串作为主体添加到http响应中,响应行看起来像“http/1.1 422状态代码422”而不是“http/1.1 422不可处理实体”。
    http.Error(w,
        webdav.StatusText(webdav.StatusUnprocessableEntity),
        webdav.StatusUnprocessableEntity)