2017-04-18 43 views
0

WebAPIサービスを作成しました。私は、サービスのコントローラを持っており、それは次のようになります。.NETアプリケーションからWeb APIへの投稿要求を送信

public class MyController : ApiController 
{ 
    [HttpPost] 
    public ResponceTools.APIResponce UserLoggedIn(UserArgs args) 
    { 
     //doing something  
    } 
} 

public class UserArgs 
{ 
    public string UserID { get; set; } 
} 

私は方法UserLoggedInに要求を送信し、カールを使用して、適切な応答を与えることができます。

curl --data "UserID=7822f2b9-44f1-4e30-a9da-d26e277fa0ac" http://localhost:8081/UserLoggedIn" 

今、私は.net Core Web Appを書いています。このサービスを使いたいと思います。

string requestStr = WebAPIURL + "/UserLoggedIn"; 
var content = new StringContent("UserID=" + userID.ToString(), 
           System.Text.Encoding.Unicode, 
           "application/xml");    
var task = client.PostAsync(requestStr, content); 
var str = await task.Result.Content.ReadAsStringAsync();  

ただし、メソッドのargs値はnullです。

私は間違っていますか?

P.S.私はWebApiアプリケーションの "登録"メソッドでXmlSerializerを有効にしようとしました。それは助けにはならない。

config.Formatters.XmlFormatter.UseXmlSerializer = true; 

ありがとうございました。

+0

var task = client.PostAsync(requestIr = "+ UserID.tostring、content); //この作品であるかどうかわからない –

+0

あなたのコンテンツタイプはxmlですが、xmlは送信していません。 – Brad

答えて

2

ユーザーIDを文字列として送信する代わりに、UserArgsのクラス定義と一致するようにオブジェクトとして送信する必要があります。

var user = { UserID: userID }; 

次に、web/apiのデフォルトのデシリアライザであるapplication/jsonのコンテンツタイプでそのオブジェクトを送信します。

var content = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json"); 
+1

ありがとうございます、私はJSONがWeb API用のデフォルトのシリアライザであるかどうか分かりませんでした。 – gikerix

0

あなたはとてもこのコンテンツタイプは、適切な唯一のものであるXMLまたはJSONでない要求データを送信しているコンテンツタイプ

var content = new StringContent("UserID=" + userID.ToString(), 
          System.Text.Encoding.Unicode, 
          "application/x-www-form-urlencoded"); 

を変更するのに十分でなければなりません。 バインドの詳細については、この記事(https://andrewlock.net/model-binding-json-posts-in-asp-net-core/)を参照してください。

関連する問題