Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用HttpRequestMessage将字节数组作为Get参数传递给web服务_C#_Asp.net Web Api - Fatal编程技术网

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

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

我需要打电话给第三方公司的Web服务来授权我的访问。流程是这样工作的。第三方应用程序通过一个表示Guid(客户端id)的字符串参数(令牌)调用我的api控制器操作。之后,我需要调用他们的其他服务来检查收到的“令牌”是否仍然有效(已授权)。问题是,第二个调用要求我将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;
        }
    }
我不确定,但因为我使用的是asp.NETWebAPI,所以在我的项目中添加服务引用似乎是“错误的”


谢谢大家!

好的,你的问题很容易看出:

token=System.Byte[]

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

  • 保持字符串不变,并直接传递到您的请求URL
  • 转换为guid,并调用
    新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);