无法在 Unity 中使用 UnityWebRequest POST 数据,它给出错误:HTTP/1.1 500 内部服务器错误

问题描述

我无法在 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;
}

解决方法

将数据作为原始数据发布 - 正文,就像您使用 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);
    //...
}

其余代码是正确的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...