C#使用HttpRequestMessage将字节数组作为Get参数传递给web服务
我需要打电话给第三方公司的Web服务来授权我的访问。流程是这样工作的。第三方应用程序通过一个表示Guid(客户端id)的字符串参数(令牌)调用我的api控制器操作。之后,我需要调用他们的其他服务来检查收到的“令牌”是否仍然有效(已授权)。问题是,第二个调用要求我将guid作为字节数组发送。我做了很多尝试,但不知道如何将字节数组中转换的Guid作为Get参数发送。这是我的密码。这将返回一个错误的请求C#使用HttpRequestMessage将字节数组作为Get参数传递给web服务,c#,asp.net-web-api,C#,Asp.net Web Api,我需要打电话给第三方公司的Web服务来授权我的访问。流程是这样工作的。第三方应用程序通过一个表示Guid(客户端id)的字符串参数(令牌)调用我的api控制器操作。之后,我需要调用他们的其他服务来检查收到的“令牌”是否仍然有效(已授权)。问题是,第二个调用要求我将guid作为字节数组发送。我做了很多尝试,但不知道如何将字节数组中转换的Guid作为Get参数发送。这是我的密码。这将返回一个错误的请求 private async Task<User> VerifyTokenAsync(s
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;
}
}
我不确定,但因为我使用的是asp.NETWebAPI,所以在我的项目中添加服务引用似乎是“错误的”
谢谢大家! 好的,你的问题很容易看出:
token=System.Byte[]
这就是在字节数组上调用ToString()时发生的情况,String.Format就是这样做的。由于我不知道您的输入字符串显示了什么,因此我将按以下顺序一次尝试以下选项:
新guid(令牌).ToString(“N”)
李>
Convert.ToBase64(bytesToken)
为URL创建Base-64字符串尝试并请将结果发回。这听起来像OAuth,但如果是,为什么不说?您所问的是非常特定于api的,因此请明确说明您使用的是什么技术。另外,如果它有效,问题是什么?只有在我将外部服务作为服务引用添加到Asp.NETWebAPI项目中时,它才有效。但是我宁愿不这样做,除非没有其他办法。嗯,我想你可以剪切并粘贴生成的代码?对不起,我不明白你的意思。我所有的代码都在那里,第二部分,就是我添加服务作为服务引用时所做的。将字节数组附加到URL后,URL是什么样子的?我已经尝试过的第一个和第二个选项,没有成功。现在测试了第三个选项,也没有成功,他们都给我一个坏的请求状态。无论如何,由于项目的紧迫性,我最终添加了一个服务引用。无论如何,谢谢你的帮助。
byte[] bytes = new Guid(token).ToByteArray();
ServiceReference1.Client client = new ServiceReference1.Client();
var response = client.RequestTokenAuthorization(bytes);