我可以accesstoken
,但我不知道如何从username
获取uuid
和accesstoken
,当我登录时,它给了我类似的东西
{"的accessToken":" 123"" clientToken":" 123"" selectedProfile":{ " ID":" 123""名称":" playername"}" availableProfiles":[{&# 34; id":" 123"," name":" playername"}]}
谢谢!
private vstrong textoid Signin_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
try
{
bool isSignedIn = false;
if (isSignedIn == true)
{
var request = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/invalidate");
request.ContentType = "application/json";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
dynamic json = JsonConvert.SerializeObject(new
{
accessToken = Settings.Default.accessToken,
clientToken = Settings.Default.clientToken
});
}
Settings.Default.UUID = null;
Settings.Default.accessToken = null;
Settings.Default.clientToken = null;
}
else
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/authenticate");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
dynamic json = JsonConvert.SerializeObject(new
{
agent = new
{
name = "Minecraft",
version = 1
},
username = email.Text,
password = password.Password
});
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
ACCESS_TOKEN = result;
}
}
}
catch (WebException)
{
MessageBox.Show("Login failed. Invalid username or password.");
}
}
string ACCESS_TOKEN;
public string GetAccessToken()
{
return ACCESS_TOKEN;
}
答案 0 :(得分:0)
这是一个JSON响应,您需要反序列化才能最有效地使用。您可以使用以下代码执行此操作:
var loginResponse = JsonConvert.DeserializeObject<LoginResponse>(result);
现在,MinecraftLoginResponse需要是你自己创建的一个类,除非你有一个库用于此。 JSON由变量值组合组成,&#39;:&#39;之后的值由逗号分隔。 {}表示一个对象,[]表示一个集合。
在我的飞船响应中,你有两个物体;响应本身,然后是Profile对象。此响应的C#代码是:
public class Profile
{
public string id { get; set; }
public string name { get; set; }
}
public class LoginResponse
{
public string accessToken { get; set; }
public string clientToken { get; set; }
public Profile selectedProfile { get; set; }
public List<Profile> availableProfiles { get; set; }
}
我通过this website运行示例响应来完成上述操作,然后删除SelectedProfile和AvailableProfile,因为这些在逻辑上将是相同的。 (已选择将是可用的配置文件之一)。