Asp.net 参数具有webrequest之后的所有属性

Asp.net 参数具有webrequest之后的所有属性,asp.net,json,asp.net-web-api,Asp.net,Json,Asp.net Web Api,我有一个非常简单的ASP.NET Api控制器,只有一个方法 public HttpResponseMessage<User> Post(User user) { return new HttpResponseMessage<User>(new User() { Name = "New User at Server" }); } 公共httpresponsemessagepost(用户) { 返回新的HttpResponseMessage(new User(){

我有一个非常简单的ASP.NET Api控制器,只有一个方法

public HttpResponseMessage<User> Post(User user)
{
    return new HttpResponseMessage<User>(new User() { Name = "New User at Server" });
}
公共httpresponsemessagepost(用户)
{
返回新的HttpResponseMessage(new User(){Name=“服务器上的新用户”});
}
我的调试器说调用了该方法,但问题是参数“user”的所有内容都设置为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());
    }
public void AddUser(Models.User用户,Action ShowResult)
{
var uiThreadScheduler=TaskScheduler.FromCurrentSynchronizationContext();
字符串url=”http://localhost:4921/User";
Uri=新的Uri(url,UriKind.Absolute);
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(uri);
request.Method=“POST”;
request.ContentType=“application/x-www-form-urlencoded”;
var sendWebPost=Task.Factory.fromsync(request.BeginGetRequestStream,request.EndGetRequestStream,null)
.ContinueWith(任务=>
{
Tuple[]stringToSend={Tuple.Create(“user”,ObjectToJson(user))};
var bytesToSend=GetRequestBytes(stringToSend);
使用(var stream=task.Result)
Write(bytesToSend,0,bytesToSend.Length);
}
).ContinueWith(任务=>
{
Task.Factory.fromsync(request.BeginGetResponse,request.EndGetResponse,null)
.ContinueWith(task2=>{ValidateResponse(task2);返回task2.Result;})
.ContinueWith(task3=>{return JsonToObject(task3);})
.ContinueWith(task4=>{TryClearWorking();ShowResult(task4.Result);},uiThreadScheduler);
});;
}
公共静态字符串ObjectToJson(T obj),其中T:class
{
DataContractJsonSerializer serializer=新的DataContractJsonSerializer(typeof(T));
MemoryStream stream=新的MemoryStream();
StreamReader sr=新的StreamReader(流);
serializer.WriteObject(stream,obj);
sr.BaseStream.Position=0;
字符串jsonString=sr.ReadToEnd();
返回jsonString;
}
受保护的静态字节[]GetRequestBytes(元组[]后参数)
{
if(后参数==null | |后参数.长度==0)
返回新字节[0];
var sb=新的StringBuilder();
foreach(后参数中的var键)
sb.追加(key.Item1+“=”+key.Item2+“&”);
sb.长度=sb.长度-1;
返回Encoding.UTF8.GetBytes(sb.ToString());
}

任何人都可以告诉我从何处开始查找错误。

您需要设置内容长度标题。

尝试过。。。需要稍微更改代码,但没有更改。用户中的内容仍然为空。