Unity中的OAuth2身份validation和操作
我需要在Unity中为Windows Mobile应用程序实现OAuth2身份validation和一些操作。 我已经设法使其作为控制台应用程序(使用.NET 4.0及更高版本)工作,但是,Unity仅支持.NET 3.5,因此简单地复制代码不起作用。 有没有办法让它在Unity中运行? 这是我的身份validation码:
private static async Task GetAccessToken() { using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://someurl.com"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair("grant_type", "client_credentials"), new KeyValuePair("client_id", "login-secret"), new KeyValuePair("client_secret", "secretpassword") }); var result = await client.PostAsync("/oauth/token", content); string resultContent = await result.Content.ReadAsStringAsync(); var json = JObject.Parse(resultContent); return json["access_token"].ToString(); } }
这是我的OAuth2function之一:
private static async Task GetMeasurements(string id, DateTime from, DateTime to) { using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://someurl.com"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair("MeasurePoints", id), new KeyValuePair("Sampling", "Auto"), new KeyValuePair("From", from.ToString("yyyy-MM-ddTHH:mm:ssZ")), new KeyValuePair("To", to.ToString("yyyy-MM-ddTHH:mm:ssZ")) }); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + GetAccessToken().Result); var result = await client.PostAsync("/api/v2/Measurements", content); string resultContent = await result.Content.ReadAsStringAsync(); var rootArray = JArray.Parse(resultContent); string measurements = ""; foreach (JObject item in rootArray) { measurements = item.GetValue("Measurements").ToString(); } return measurements; } }
如果您有任何建议,我将永远感激。 谢谢!
翻译成旧的.NET版本并不难。 您可以使用Unity的WWW
或UnityWebRequest
API。 他们中的任何人都应该这样做。
1.使用UnityWebRequest
HttpClient
。
2.使用Dictionary
替换KeyValuePair
。
3.使用SetRequestHeader
替换DefaultRequestHeaders
。
4.使用 client.PostAsync
替换UnityWebRequest.Send
5.对于Json,使用unity的JsonUtility
6.对于GetMeasurements
函数中的Json数组,请使用此post中的JsonHelper
类。
而已。 我能够快速移植。 没有测试它,但它能够编译,应该让你开始。
GetAccessToken
函数 :
[Serializable] public class TokenClassName { public string access_token; } private static IEnumerator GetAccessToken(Action result) { Dictionary content = new Dictionary(); //Fill key and value content.Add("grant_type", "client_credentials"); content.Add("client_id", "login-secret"); content.Add("client_secret", "secretpassword"); UnityWebRequest www = UnityWebRequest.Post("https://someurl.com//oauth/token", content); //Send request yield return www.Send(); if (!www.isError) { string resultContent = www.downloadHandler.text; TokenClassName json = JsonUtility.FromJson(resultContent); //Return result result(json.access_token); } else { //Return null result(""); } }
GetMeasurements
function :
[Serializable] public class MeasurementClassName { public string Measurements; } private static IEnumerator GetMeasurements(string id, DateTime from, DateTime to, Action result) { Dictionary content = new Dictionary(); //Fill key and value content.Add("MeasurePoints", id); content.Add("Sampling", "Auto"); content.Add("From", from.ToString("yyyy-MM-ddTHH:mm:ssZ")); content.Add("To", to.ToString("yyyy-MM-ddTHH:mm:ssZ")); content.Add("client_secret", "secretpassword"); UnityWebRequest www = UnityWebRequest.Post("https://someurl.com/api/v2/Measurements", content); string token = null; yield return GetAccessToken((tokenResult) => { token = tokenResult; }); www.SetRequestHeader("Authorization", "Bearer " + token); www.Send(); if (!www.isError) { string resultContent = www.downloadHandler.text; MeasurementClassName[] rootArray = JsonHelper.FromJson(resultContent); string measurements = ""; foreach (MeasurementClassName item in rootArray) { measurements = item.Measurements; } //Return result result(measurements); } else { //Return null result(""); } }
用法 :
string id = ""; DateTime from = new DateTime(); DateTime to = new DateTime(); StartCoroutine(GetMeasurements(id, from, to, (measurementResult) => { string measurement = measurementResult; //Do something with measurement UnityEngine.Debug.Log(measurement); }));
我想你应该看看这个: https : //docs.unity3d.com/Manual/UnityWebRequest.html
这个类提供了你想要的function,可以在协程中使用。
或者:使用UNIRX发布并获取异步。 这个lib有很棒的Web处理部分。 https://github.com/neuecc/UniRx
上述就是C#学习教程:Unity中的OAuth2身份validation和操作分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010579.html