Asp.net 参数具有webrequest之后的所有属性
我有一个非常简单的ASP.NET Api控制器,只有一个方法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(){
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());
}
任何人都可以告诉我从何处开始查找错误。您需要设置内容长度标题。尝试过。。。需要稍微更改代码,但没有更改。用户中的内容仍然为空。