【问题标题】:Cannot POST data using UnityWebRequest in Unity, it gives Error: HTTP/1.1 500 Internal Server Error无法在 Unity 中使用 UnityWebRequest 发布数据,它给出错误:HTTP/1.1 500 内部服务器错误
【发布时间】:2020-12-24 20:25:51
【问题描述】:

我无法在 Unity 中使用 UnityWebRequest 以 Json 格式发布数据。它给出了错误

错误:HTTP/1.1 500 内部服务器错误

我正在使用在 ASP.NET Core 中制作并在 IIS Express 上本地托管的 Web 服务。

这是我在 Unity 中的 C# 代码

public class AddUsers : MonoBehaviour
{
    IEnumerator addOrUpdateUser()
    {
        User user = new User()
        {
            Id = "0001",
            Name = "John",
        }

        UnityWebRequest req = UnityWebRequest.Post("http://localhost:58755/User/AddNewUser", JsonConvert.SerializeObject(user));
        req.SetRequestHeader("Content-Type", "application/json");
        req.certificateHandler = new BypassCertificate();

        yield return req.SendWebRequest();
        
        if (req.isNetworkError || req.isHttpError || req.isError)
            print("Error: " + req.error);
        print(req.downloadHandler.text);
    }
}

[Serializable]
public class UserDetails
{
    public string Id { get; set; }
    public string Name { get; set; }
}

这是我使用 Entity Framework Core 的 ASP.NET Core 代码

[HttpPost]
string AddNewUser([FromBody]User user)
{
    Context.LogoQuizUsers.Add(user); // I am getting System.NullReferenceException here
    Context.SaveChanges();
    return "Inserted Id: " + user.Id;
}

【问题讨论】:

    标签: c# asp.net unity3d iis unitywebrequest


    【解决方案1】:

    像使用 Postman 或任何类似界面发送的原始数据一样发布数据。 将请求的UploadHandler 设置为UploadHandlerRaw。添加和更改您的声明

    UnityWebRequest req = UnityWebRequest.Post("http://localhost:58755/User/AddNewUser", "POST");
    req.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(user))) as UploadHandler;
    

    因此最终的代码将是

    IEnumerator addOrUpdateUser()
    {
        //...
        UnityWebRequest req = UnityWebRequest.Post("http://localhost:58755/User/AddNewUser", "POST");
        req.SetRequestHeader("Content-Type", "application/json");
        req.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(user))) as UploadHandler;
        req.certificateHandler = new BypassCertificate();
    
        yield return req.SendWebRequest();
    
        if (req.isNetworkError || req.isHttpError || req.isError)
            print("Error: " + req.error);
    
        print(req.downloadHandler.text);
        //...
    }
    

    其余代码是正确的。

    【讨论】:

      【解决方案2】:

      this topic

      在 Unity 编辑器中: 转到窗口-> 包管理器。 在新窗口的顶部栏中,搜索“Packages : XXXXXX”下拉菜单并选择“Unity Registry”。 搜索“WebGl 发布者”并安装/导入它。

      IIIFFF 包没有出现: 在同一个包管理器窗口中,单击“+”按钮 -> 从 git 添加。 添加以下内容: com.unity.connect.share

      这将自动添加 WebGL Publisher。

      它帮助我解决了问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 2015-11-13
        相关资源
        最近更新 更多