0

このフォーラムは初めてです。

WindowsアプリにHttclientを使用して基本認証を実行しようとしています。

var handler2 = new HttpClientHandler
{
Credentials = new NetworkCredential(username, password)
};
var httpClient2 = new HttpClient(handler2);
httpClient2.DefaultRequestHeaders.Add("user-Agent", "authentication.cs");
var response2 = httpClient.GetAsync(uri);

2つの質問があります:

ヘッダーコンテンツタイプとユーザーエージェントを追加する必要があります。それらを追加する方法がわからない。誰かが私を助けてくれませんか。

応答として、null値を取得しています。なぜですか?

よろしく、

TM

4

1 に答える 1

0

次のようにして、ユーザーエージェントヘッダーを追加できます。

    client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("authentication.cs"));

PUTまたはPOSTを使用して一部のコンテンツを送信する場合にのみContent-Typeを設定できるため、デフォルトのリクエストヘッダーにContent-Typeを追加することはできません。Acceptヘッダーを次のように設定したいと思います。

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));

更新:私自身のアカウントがなければ、これは私が行くことができる限りです。

パブリックシールされた部分クラスMainPage:ページ{プライベート読み取り専用HttpClient _httpClient = new HttpClient();

    public MainPage()
    {
        this.InitializeComponent();
        InitHttpClient();

    }

    private void InitHttpClient() {
        var username = "youremail@somewhere.com";
        var password = "yourharvestpassword";
        String authparam = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
        _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authparam);
        _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
        _httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MyHarvestClient", "1.0"));
    }

    /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.  The Parameter
    /// property is typically used to configure the page.</param>
    protected override void OnNavigatedTo(NavigationEventArgs e) {

        _httpClient.GetAsync("https://yoursubdomain.harvestapp.com/projects")
            .ContinueWith(t => HandleResponse(t.Result));
    }

    private void HandleResponse(HttpResponseMessage response) {
        response.EnsureSuccessStatusCode();

        var contentString = response.Content.ReadAsStringAsync().Result;  
        var contentXML = XDocument.Parse(contentString);

    }
}
于 2013-01-10T02:17:18.217 に答える