调用HTTPClient.PostAsync时设置标头

问题描述 投票:1回答:2

在使用简单的HTTPClient时,我可以在哪里设置标头到REST服务调用?

我做 :

    HttpClient client = new HttpClient();
    var values = new Dictionary<string, string>
{
        {"id", "111"},
        {"amount", "22"}
};
    var content = new FormUrlEncodedContent(values);
    var uri = new Uri(@"https://some.ns.restlet.uri");

    var response = await client.PostAsync(uri, content);
    var responseString = await response.Content.ReadAsStringAsync();

UPD

我要添加的标题是:

{"Authorization":"NLAuth nlauth_account=5731597_SB1, [email protected], nlauth_signature=Pswd1234567, nlauth_role=3","Content-Type":"application/json"}

我应该遵循:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "NLAuth nlauth_account=5731597_SB1, [email protected], nlauth_signature=Pswd1234567, nlauth_role=3","Content-Type":"application/json");
c# netsuite
2个回答
7
投票

添加标头的方法如下:

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

或者如果你想要一些自定义标题:

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("HEADERNAME", "HEADERVALUE");

这个答案已有SO回复,见下文:

UPDATE

好像你要添加两个标题;授权和内容类型。

string authValue = "NLAuth nlauth_account=5731597_SB1,[email protected], nlauth_signature=Pswd1234567, nlauth_role=3";
string contentTypeValue = "application/json";

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(authValue);
client.DefaultRequestHeaders.Add("Content-Type", contentTypeValue);

1
投票

我知道这是前一段时间被问过的,但Juan的解决方案并不适合我。

(另外,非常确定这个问题是重复的here。)

最终工作的方法是使用HttpClient与HttpRequestMessageHttpResponseMessage

另请注意,这是使用Newtonsoft的Json.NET

    using System;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net.Http.Headers;
    using Newtonsoft.Json;

    namespace NetsuiteConnector
    {
        class Netsuite
        {

            public void RunHttpTest()
            {
                Task t = new Task(TryConnect);
                t.Start();
                Console.WriteLine("Connecting to NS...");
                Console.ReadLine();
            }

            private static async void TryConnect()
            {
                // dummy payload
                String jsonString = JsonConvert.SerializeObject(
                    new NewObj() {
                        Name = "aname",
                        Email = "[email protected]"
                    }
                );

                string auth = "NLAuth nlauth_account=123456,[email protected],nlauth_signature=yourpassword,nlauth_role=3";

                string url  = "https://somerestleturl";
                var uri     = new Uri(@url);

                HttpClient c = new HttpClient();
                    c.BaseAddress = uri;
                    c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", auth);
                    c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, url);
                req.Content = new StringContent(jsonString, Encoding.UTF8, "application/json");

                HttpResponseMessage httpResponseMessage = await c.SendAsync(req);
                httpResponseMessage.EnsureSuccessStatusCode();
                HttpContent httpContent = httpResponseMessage.Content;
                string responseString = await httpContent.ReadAsStringAsync();

                Console.WriteLine(responseString);
            }
        }

        class NewObj
        {
            public string Name { get; set; }
            public string Email { get; set; }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.