2017-07-04 9 views
1

私のASP.NET Core Web APIプロジェクトからPOSTリクエストを送信しようとしていますが、要求は送信されません。このメソッドはエラーなしで実行されますが、要求はasyncメソッドから送信されることはありません。C#Web API - POSTリクエストが実行されない

私の実装:

public async void notify(String message) 
{  
    String url = "MY_WEBSERVICE_URL"; 
    var client = new HttpClient(); 
    client.BaseAddress = new Uri(url); 
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress"); 
    request.Content = new StringContent("application/x-www-form-urlencoded;charset=UTF-8", 
    Encoding.UTF8, "application/json"); 

    Byte[] byteArray = Encoding.UTF8.GetBytes("{\"text\":\"" + message + "\"}"); 
    request.Content.Headers.ContentLength = byteArray.Length; 

    await client.SendAsync(request).ContinueWith(responseTask => 
    { 
     Console.WriteLine("Response: {0}", responseTask.Result); 
    }); 
} 

これは、コアウェブAPIプロジェクトからのPOSTリクエストを作る適切な方法ですか?まず、事前に

+0

なぜあなたは 'async void'を使用していますか? 'asyncタスク 'を使用してください。 – Lloyd

答えて

1

をいただきありがとうございます、専用の方法PostAsyncは、手動HttpRequstMessageを作成せずにPOSTリクエストを送信するために使用することができますHttpClientクラス(あるいはPostAsJsonAsync拡張子)であります。あなたが現在

var json = "{\"text\":\"" + message + "\"}"; 
request.Content = new StringContent(json, Encoding.UTF8, "application/json"); 

:あなたが送信しているStringContentのコンテンツとしてこの文字列を設定する必要があり

{"text":"someMessage"} 

: - あなたのコードについて今

は、私はあなたがJSON文字列以下の投稿したいと考えていますAPIエンドポイントに値としてmediatype文字列を送信しようとしています。もちろん、モデルに逆シリアル化することはできません。

注1:StringContentが自動的に適切な値とContent-Lengthヘッダを追加します。それを手動で行うべきではありません。

注2:これはイベントハンドラでない限り、あなたはasync voidを使うべきではありません - 代わりにasync Taskを使用しています。 PostAsJsonAsync用法


同じタスクは、次のようになります。この場合

public async Task Notify(string message) 
{ 
    var string url = "MY_WEBSERVICE_URL"; 
    var client = new HttpClient(); 
    client.BaseAddress = new Uri(url); 
    var notification = new Notification { Text = message }; // use some model class 
    var resonse = await client.PostAsJsonAsync("relativeAddress", notification); 
    if (response.IsSuccessStatusCode) 
    { 
     var content = await response.Content.ReadAsStringAsync(); 
    } 
} 

、あなたのモデルが自動的にJSONにシリアライズされ、適切なコンテンツが作成され、POSTリクエストが送信されます。

+0

詳細な回答をありがとう。しかし、私はエラー 'HttpClientはPostAsJsonAsync'の定義を含んでいません。私は、ライブラリ 'Microsoft.AspNet.WebApi.Client'が不足していることがわかりました。問題は、その参照が追加されず、「1つ以上のパッケージが.NETCoreApp、Version = v1.1(win-x86)と互換性がありません」というエラーメッセージで失敗します。 – Dinuka

+0

@RickGrimesTheCoder私の悪い - この拡張機能はまだ.netコアに移植されていないようです。しかし、あなたは同じことを行い、[ここに記載されているように] 'PostAsync'を呼び出すことができます(https://stackoverflow.com/questions/40027299/where-is-postasjsonasync-method-in-asp-net-core) –

+1

ありがとうございました:) – Dinuka

関連する問題