我需要从第三方公司拨打网络服务来授权我的访问权限。流程以这种方式工作。第三方应用程序调用我的api控制器操作传递一个表示Guid(客户端ID)的字符串参数(标记)。之后,我需要调用他们的其他服务来检查收到的“令牌”是否仍然有效(授权)。问题是第二次调用要求我将guid作为字节数组发送。我尝试了很多,但无法弄清楚如何将在字节数组中转换的Guid作为Get参数发送。这是我的代码。这将返回错误请求。
private async Task<User> VerifyTokenAsync(string token)
{
try
{
byte[] bytesToken = new Guid(token).ToByteArray();
string serviceUrl = string.Format("http://third.party.RequestTokenAuthorization?token={0}", bytesToken);
using (HttpClient client = new HttpClient())
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(serviceUrl)))
using (HttpResponseMessage response = await client.SendAsync(request))
{
if (response.StatusCode == HttpStatusCode.OK)
{
var stream = await response.Content.ReadAsStreamAsync();
}
else
{
//todo
}
}
}
catch (Exception ex)
{
Log.SaveError(ex);
return null;
}
}
添加字节数组后的URL如下所示: http://third.party/RequestTokenAuthorization?token=System.Byte []
Obs:我在项目中将服务添加为ServiceReference,并使用客户端生成的方法调用它:
byte[] bytes = new Guid(token).ToByteArray();
ServiceReference1.Client client = new ServiceReference1.Client();
var response = client.RequestTokenAuthorization(bytes);
我不确定但是因为我正在使用asp.net web api,所以在我的项目中添加服务引用似乎“错误”。
谢谢!
答案 0 :(得分:0)
好的,您的问题很容易看到:
token=System.Byte[]
当你在字节数组上调用ToString()时会发生这种情况,这就是String.Format的作用。由于我不知道您的输入字符串显示了什么,我将按此顺序逐个尝试以下选项:
new Guid(token).ToString("N")
; Convert.ToBase64(bytesToken)
为您的网址创建Base-64字符串。请尝试发回结果。