0

私は 1 つのメソッドを持つ非常に単純な ASP.NET Api コントローラーを持っています。

public HttpResponseMessage<User> Post(User user)
{
    return new HttpResponseMessage<User>(new User() { Name = "New User at Server" });
}

私のデバッガーは、メソッドが呼び出されたと言っていますが、問題は、パラメーター「ユーザー」のすべてのコンテンツが null に設定されていることです。私は Fiddler を使用してリクエストとレスポンスを調べています..そしてすべてが良さそうです。

これは、クライアントのサービス コードです。

    public void AddUser(Models.User user, Action<Models.User> ShowResult)
    {
        var uiThreadScheduler = TaskScheduler.FromCurrentSynchronizationContext();
        string url = "http://localhost:4921/User";
        Uri uri = new Uri(url, UriKind.Absolute);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        var sendWebPost = Task.Factory.FromAsync<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream, null)
        .ContinueWith(task =>
            {
                Tuple<string, string>[] stringToSend = { Tuple.Create<string, string>("user", ObjectToJson<Models.User>(user)) };
                var bytesToSend = GetRequestBytes(stringToSend);   
                using (var stream = task.Result)
                    stream.Write(bytesToSend, 0, bytesToSend.Length);
            }
        ).ContinueWith(task => 
            {
                Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null)
                    .ContinueWith<WebResponse>(task2 => { ValidateResponse(task2); return task2.Result; })
                    .ContinueWith<Models.User>(task3 => {return JsonToObject<Models.User>(task3);})
                    .ContinueWith(task4 => { TryClearWorking(); ShowResult(task4.Result); }, uiThreadScheduler);
            });;


    }

    public static string ObjectToJson<T>(T obj) where T : class
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        MemoryStream stream = new MemoryStream();

        StreamReader sr = new StreamReader(stream);

        serializer.WriteObject(stream, obj);
        sr.BaseStream.Position = 0;
        string jsonString = sr.ReadToEnd(); 
        return jsonString;
    }


    protected static byte[] GetRequestBytes(Tuple<string, string>[] postParameters)
    {
        if (postParameters == null || postParameters.Length == 0)
            return new byte[0];
        var sb = new StringBuilder();
        foreach (var key in postParameters)
            sb.Append(key.Item1 + "=" + key.Item2 + "&");
        sb.Length = sb.Length - 1;

        return Encoding.UTF8.GetBytes(sb.ToString());
    }

どこからエラーを探し始めるかについてのアイデアを教えてくれる人は誰でも.....

4

1 に答える 1

0

Content-Lengthヘッダーを設定する必要があります。

于 2012-05-14T11:41:28.873 に答える