Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
C# REST API Post中不允许使用HTTP方法_C#_Unity3d_Http Post - Fatal编程技术网

C# REST API Post中不允许使用HTTP方法

C# REST API Post中不允许使用HTTP方法,c#,unity3d,http-post,C#,Unity3d,Http Post,我使用UnityWebRequest在JSON上发布一个可以在线访问的字符串。不幸的是,我在Unity中得到了HTTP/1.1405方法不允许的错误。这肯定不是API密钥错误,否则我会收到未经授权的消息 我见过一些例子,其中使用PUT而不是POST,所以我不确定我在这里为POST所做的是正确的还是错误的。请帮帮我 IEnumerator POSTURL() { WWWForm form = new WWWForm(); form.AddField(&quo

我使用UnityWebRequest在JSON上发布一个可以在线访问的字符串。不幸的是,我在Unity中得到了
HTTP/1.1405方法不允许的错误。这肯定不是API密钥错误,否则我会收到未经授权的消息

我见过一些例子,其中使用PUT而不是POST,所以我不确定我在这里为POST所做的是正确的还是错误的。请帮帮我

IEnumerator POSTURL()
    {
        WWWForm form = new WWWForm();
        form.AddField("ID", "Lemon");

        using (UnityWebRequest request = UnityWebRequest.Post("website_url", form))
        {
            request.SetRequestHeader("api-key", KEY);
            yield return request.SendWebRequest();

            if (request.isNetworkError || request.isHttpError)
            {
                Debug.Log(request.error);
            }
            else
            {
                Debug.Log("Form upload complete!");
            }
        }
    }

仍然只是一个猜测,但更容易解释我在这里的意思^^

你可能必须使用


或者如前所述,您也可以遵循并使用
Post
,但不使用表单,而是直接使用原始数据


使用“PUT”时api调用是否成功?您应该仔细阅读HTTP状态码及其含义。405特别声明此处显然不允许发布,api要求使用不同的http谓词。您使用的URL是什么?除了“website_url”之外,应该有一个可以处理此类请求的有效url,您确定这是一个可以处理此类请求的正确url吗?@Pio Yes即使在我的JSON所在的网站上,它也被称为“Put”,用于手动输入数据。但我不知道如何将WWWForm与HTTP Put一起使用,因为如果我没有错的话,它会使用字节。@IvanG是的,我知道这一点,但我认为问题在于POST/Put。我必须更改代码以使用HTTP Put。我不知道如何使用它。@jay.mila然后填写
Lemon
^^我相信这绝对是正确的答案。只是我在
Encoding.UTF8.GetBytes($“{\'ID\”:“{ID}\”,“Category\”:“{Category}\”)处遇到语法错误我通过
“$
修复了它(仅在智能手机上,但在使用字符串插值时,必须使用
{{
转义
{
),请再试一次Hanks:)现在的问题是
HTTP/1.1 415不支持的媒体类型
错误。我在这里发布的JSON示例很短,但我有大量的JSON数据。我想我必须将它们全部导入才能更改一个ID的数据?@jay.mila这在很大程度上取决于您的服务器是如何构建的,以及它期望的是什么…您是否尝试过et
webRequest.SetRequestHeader(“内容类型”、“应用程序/json”);
是的,我尝试了,然后得到了
HTTP/1.1400错误请求
。我将看看为什么会发生这种情况,但感谢您的解决方案:)
{
    "ID": "Orange",
    "Category": "Fruits",
}
// You could pass these as parameters dynmically
IEnumerator POSTURL(string id, string category)
{
    // This is string interpolation and will dynamically fill in the 
    // id and category value
    var data = Encoding.UTF8.GetBytes($"{{\"ID\":\"{id}\",\"Category\":\"{category}\"}}");

    using (UnityWebRequest request = UnityWebRequest.Put("website_url", data))
    {
        request.SetRequestHeader("api-key", KEY);

        yield return request.SendWebRequest();

        if (request.isNetworkError || request.isHttpError)
        {
            Debug.Log(request.error);
        }
        else
        {
            Debug.Log("Form upload complete!");
        }
    }
}
var data = Encoding.UTF8.GetBytes($"{{\"ID\":\"{id}\",\"Category\":\"{category}\"}}");
UnityWebRequest webRequest = UnityWebRequest.Post(uri, "");

// Fix: Add upload handler and pass json as bytes array
webRequest.uploadHandler = new UploadHandlerRaw(data);

webRequest.SetRequestHeader("Content-Type", "application/json");
yield return webRequest.SendWebRequest();