赞
踩
开发平台:Unity 2020 版本以上
编程平台:Visaul Studio 2022
编程语言:CSharp 6.0 以上
public IEnumerator Start()
{
using UnityWebRequest reqeust = UnityWebRequest.Get("http://192.168.16.80:8080/Example", "postData")
yield return request.SendWebReqeust();
}
Unity 官方文档中使用 UnityWebRqeust.Get(url, postData)
来获取地址返回数据。与 UnityWebRequest.Get()
同样。
但实际网络文章有一些篇幅以 new UnityWebReqeust(url, method)
开头方式获取地址返回数据。这在官方文档中并未详细的提供说明描述。于是对于 Post
的使用方式出现了疑惑,即 何时使用 两者?
官方对 该请求方法 提供了10种重载方法。如下其中一种所示:
public static UnityWebRequest Post(string uri, string postData)
{
UnityWebRequest request = new UnityWebRequest(uri, "POST");
SetupPost(request, postData);
return request;
}
注意SetupPost
,UnityWebReqeust
针对 Post 提供了 string 类型与 WWWForm 类型的重载方法。其中:
WWWForm
明确数据 Post 形式为表单string
则是在方法中 UnityWebReqeust.uploadHandler.contentType = "application/x-www-form-urlencoded"
强调为表单。根据 UnityWebReqeust.Post
的源码解释,这10种重载的方法均 强制使用 表单 作为Post内容。因此仅能要求服务端必须以表单形式解析数据内容。
是的,这是 UnityEngine 中并未提供的内容。因此需要按照 Post 表单流程,更变为 Post Json 字符串内容。
public static UnityWebRequest Post(string uri, string json)
{
UnityWebRequest request = new UnityWebRequest(uri, "POST")
SetupPost(request, json);
return request;
}
对应的 SetUpPost(UnityWebReqeust, jsonData)
public static void SetupPost(UnityWebReqeust request, string json)
{
request.downloadHandler= new DownloadHandlerBuffer();
if (!string.IsNullOrEmpty(json))
{
byte[] array = Encoding.UTF8.GetBytes(jsonData);
request.uploadHandler = new UploadHandlerRaw(array);
request.uploadHandler.contentType = "application/json;charset=utf-8";
}
}
部分网络文章并不会使用 request.uploadHanlder.contentType = "application/json;charset=utf-8"
来标识内容信息。
与之相对用 reqeust.SetReqeustHeader("Content-Type", "application/json;charset=utf-8")
标识上传数据格式。
两种方式均可使用。并不影响结果返回。
关于 Request.SetReqeusetHeader()
这似乎是一个不受请求方式限制方法。例如:Get 中设置请求参数。
毕竟引用 UnityEngine.Network.dll,直接修改源码补充显然是不可能的。为了习惯上使用 UnityWebRequest.Post()
。新建一个命名空间下的类 UnityWebRequest
,例如:
using UnityEngine.Network;
using UnityEngine;
namespace UnityEngine.Network.Extension;
public class UnityWebReqeust
{
public static UnityWebRequest Post(string uri, string json) { //抄写上一部分内容 }
public static UnityWebRequest Post(Uri uri, string json) { //同上 }
private static void SetupPost(UnityWebRequest request, string json) { //同上 }
}
这样,在使用的时候按习惯为
using UnityNetwork = UnityEngine.Network;
using UnityNetworkExtension = UnityEngine.Network.Extension;
public class Example
{
IEnuemrator Start()
{
using UnityNetwork.UnityWebRequest request = UnityNetworkExtension.UnityWebRequest.Post(url, json)
//.....
}
}
事实上,为了避免引用上的阅读的理解 使用其他命名会更佳阅读表现。
using UnityWebReqeust reqeust = UniNetCustom.UniWeb.Post(url, json)
UnityWebRequest(string url, string method)
- method :指定本次 HTTP 的使用方向,要求为大写字符串。但更多推荐使用
UnityWebRequest.内定字符
作为标识符。
字符串 | UnityWebRquest 引用 | 解释 |
---|---|---|
GET | UnityWebReqeust.kHttpVerbGET | 设置 HTTP 作为 Get 请求数据 |
HEAD | UnityWebReqeust.kHttpVerbHEAD | |
POST | UnityWebReqeust.kHttpVerbPOST | 设置 HTTP 作为 POST请求数据 |
PUT | UnityWebReqeust.kHttpVerbPUT | |
CREATE | UnityWebReqeust.kHttpVerbCREATE | |
DELETE | UnityWebReqeust.kHttpVerbDELETE |
目前笔者较多接触为 Post
与 Get
,其余关联提交与本文 Post 的流程大致。但具体应根据 Unity 源码流程参考进行。避免失误。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。