27

WebAPIに新しいメソッドがあります

[HttpPost]
public ApiResponse PushMessage( [FromUri] string x, [FromUri] string y, [FromBody] Request Request)

リクエストクラスは次のようなものです

public class Request
{
    public string Message { get; set; }
    public bool TestingMode { get; set; }
}

PostBodyを使用してlocalhost/Pusher / PushMessage?x = foo&y=barにクエリを実行しています。

{ Message: "foobar" , TestingMode:true }

私は何かが足りないのですか?

4

3 に答える 3

33

投稿の本文は通常、次のようなURI文字列です。

Message=foobar&TestingMode=true

HTTPヘッダーに含まれていることを確認する必要があります

Content-Type: application/x-www-form-urlencoded

編集:それはまだ機能していないので、私は完全な例を自分で作成しました。
正しいデータを出力します。
.NET4.5RCも使用しました。

// server-side
public class ValuesController : ApiController {
    [HttpPost]
    public string PushMessage([FromUri] string x, [FromUri] string y, [FromBody] Person p) {
        return p.ToString();
    }
}

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString() {
        return this.Name + ": " + this.Age;
    }
}

// client-side
public class Program {
    private static readonly string URL = "http://localhost:6299/api/values/PushMessage?x=asd&y=qwe";

    public static void Main(string[] args) {
        NameValueCollection data = new NameValueCollection();
        data.Add("Name", "Johannes");
        data.Add("Age", "24");

        WebClient client = new WebClient();
        client.UploadValuesCompleted += UploadValuesCompleted;
        client.Headers["Content-Type"] = "application/x-www-form-urlencoded";
        Task t = client.UploadValuesTaskAsync(new Uri(URL), "POST", data);
        t.Wait();
    }

    private static void UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e) {
        Console.WriteLine(Encoding.ASCII.GetString(e.Result));
    }
}
于 2012-08-22T11:48:05.203 に答える
1

WebAPIは命名規則を使用します。投稿の方法は、Postから開始する必要があります。

PushMessageの名前をメソッド名PostMessageに変更する必要があります。

また、Web apiはデフォルトで(ルートに応じて)'api / values / Message'をリッスンし、Pusher/Pushmessageはリッスンしません。

[HttpPost]属性は必要ありません

于 2012-11-30T10:07:28.610 に答える
0

次のコードを使用して、リクエスト本文にjsonを投稿できます。

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

Request request = new Request();
HttpResponseMessage response = httpClient.PostAsJsonAsync("http://localhost/Pusher/PushMessage?x=foo&y=bar", request).Result;

//check if (response.IsSuccessStatusCode)
var createResult = response.Content.ReadAsAsync<YourResultObject>().Result;
于 2012-08-23T07:40:10.827 に答える