这个问题很常见。如果您使用过 Rest API,那么事情就很容易理解了。
启用 CORS:
我使用 python flask 创建了一个 rest API,它托管在 Heroku 中。 Heroku 的优点是它默认支持 CORS,您不需要设置它。如今,托管应用程序的最大服务器,尤其是 python,具有相同的功能。因此,那些有 CORS 相关问题的人必须首先启用 CROS,这是强制性的。
在 Postman 中测试:
需要在 Postman 中测试您的 API。如果您的应用程序不支持 CORS,它仍然可以在 Postman 中运行。所以在 postman 中工作并不能保证它会在 Unity 中运行。
下一个要考虑的重要事项是您在邮递员中使用的标头。
喜欢:{"Key":"Content-Type" , "value":"application/json" }
因为你还需要在统一的 www 标头中传递它。
接下来需要观察的是你在体内传递了什么以及你是如何传递的。通常我们在 Postman 中将其作为 JSON(application/json) 发送。
喜欢:
`{
"username":"Mukesh",
"password":"admin@1234",
"email_id":"mukeshh@gmail.com",
"us_dollar":"2000000000",
"device_id":"123456789"
}`
现在,如果您启用 CORS 的 API 在 Postman 中运行良好,那么放松一下,它也可以统一运行。
统一部分:
首先我必须创建一个将转换为 Json 的类。
[Serializable]
public class UserRegistration
{
//CAUTION:
//NOTE:
//DO NOT ALTER THE NAME OF PARAMETERS .
//THE JSON key WILL FAIL THEN .Properties will be the key of JSON .
/// <summary>
/// User name .
/// </summary>
public string username;
/// <summary>
/// Password .
/// </summary>
public string password;
/// <summary>
/// Emil id.
/// </summary>
public string email_id;
/// <summary>
/// JoeGames Doller .
/// </summary>
public string us_dollar;
/// <summary>
/// Device id .
/// </summary>
public string device_id;
/// <summary>
/// Constructor .
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="email_id"></param>
/// <param name="us_dollar"></param>
/// <param name="device_id"></param>
public UserRegistration(string username, string password, string email_id, string us_dollar, string device_id)
{
this.username = username;
this.password = password;
this.email_id = email_id;
this.us_dollar = us_dollar;
this.device_id = device_id;
}
}
接下来您必须将对象转换为 json。
//var create json.
var userregistration = new UserRegistration(
username: username,
password: password,
email_id: emailid,
us_dollar: joeGamesDollar.ToString(),
device_id: deviceid);
//convert to json.
var json = JsonUtility.ToJson(userregistration);
//debug.
Debug.Log("Print json"+json);
//update json.
json = json.Replace("'", "\"");
接下来,将json转成byte,并用header做post。
//Encode the JSON string into a bytes
var postData = System.Text.Encoding.UTF8.GetBytes(json);
//create headers.
//Add keys an values .
var headers = new Dictionary<string, string> {{"Content-Type", "application/json"}};
//Now call a new WWW request
var www = new WWW(url,postData,headers);
//Yield return www .
yield return www;
Debug.Log("Error" + www.error.ToString());
Debug.Log("Data" + www.text);
Debug.Log(www.responseHeaders+"Done"+www.isDone);
//dispose.
www.Dispose();
不要忘记将它写在枚举器中。
如果你使用一些东西
喜欢:
IEnumerator Upload()
{
WWWForm form = new WWWForm();
form.AddField("username", "Mukesh");
form.AddField("password", "admin@1234");
form.AddField("email_id", "mikesh@gmail.com");
form.AddField("us_dollar", "2000000");
form.AddField("device_id", device_id);
using (UnityWebRequest www = UnityWebRequest.Post(url, form))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Form upload complete!");
}
}
}
您将收到一个通用/未知错误,因为在这种情况下,Unity Web 请求无法按照您的 API 要求发布或发送数据。
注意:
有时 400 Bad request 也统一作为未知的 Generic/Unknown HTTP Error 提供。所以不要忘记检查后端的代码以确保您的 API 没有出现任何异常。