C#使用HttpRequestMessage将字节数组作为Get参数传递给Web服务

时间:2014-01-30 11:48:13

标签: c# asp.net-web-api

我需要从第三方公司拨打网络服务来授权我的访问权限。流程以这种方式工作。第三方应用程序调用我的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,所以在我的项目中添加服务引用似乎“错误”。

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,您的问题很容易看到:

token=System.Byte[]

当你在字节数组上调用ToString()时会发生这种情况,这就是String.Format的作用。由于我不知道您的输入字符串显示了什么,我将按此顺序逐个尝试以下选项:

  1. 保持字符串不变,直接传递到您的请求网址。
  2. 转换为guid,并致电new Guid(token).ToString("N");
  3. 使用Convert.ToBase64(bytesToken)为您的网址创建Base-64字符串。
  4. 请尝试发回结果。