簡體   English   中英

C#使用HttpRequestMessage將字節數組作為獲取參數傳遞給Web服務

[英]C# Passing a byte array as a Get Parameter to a web service using HttpRequestMessage

我需要致電第三方公司的網絡服務來授權我的訪問。 流程以這種方式工作。 第三方應用程序調用我的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網絡api,因此向我的項目添加服務引用對我來說似乎是“錯誤的”。

謝謝!

好的,您的問題很容易看到:

token=System.Byte[]

當您在字節數組上調用ToString()時,就會發生這種情況,這就是String.Format的作用。 由於我不知道您的輸入字符串顯示什么,因此我將按此順序一次嘗試以下選項:

  1. 保留字符串原樣,並直接傳遞到您的請求URL。
  2. 轉換為guid,然后調用new Guid(token).ToString("N") ;
  3. 使用Convert.ToBase64(bytesToken)為您的URL創建一個Base-64字符串。

嘗試並請返回結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM