如何解决Silverlight 4.0:使用对.Net 4 Webservice的WebClient UploadStringAsync POST请求
|| 我正在尝试运行以下代码: Silverlight应用程序xaml.cs:private void SavePoiRequest(MyPushpin pin)
{
WebClient wc = new WebClient();
wc.Headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";
wc.Encoding = Encoding.UTF8;
wc.UploadStringCompleted += new UploadStringCompletedEventHandler((sender,e) =>
{
if (e.Error != null)
{
return;
}
AddressTextBox.Text = e.Result;
});
String name = pin.Name;
String lat = pin.Location.Latitude.ToString().Replace(\",\",\".\");
String lng = pin.Location.Longitude.ToString().Replace(\",\".\");
String address = pin.Address;
String photodesc = pin.PhotoDesc;
String poistory = pin.Tag.ToString();
StringBuilder sr = new StringBuilder();
sr.Append(\"createpoi?name=\"+name+ \"&lat=\" + lat + \"&lng=\" + lng + \"&adr=\" + address + \"&desc=\" + photodesc + \"&story=\" + poistory);
String parameter = sr.ToString();
wc.UploadStringAsync(new Uri(\"http://localhost:80/\"),\"POST\",parameter);
AddressTextBox.Text = parameter;
}
Web服务CS:
[WebInvoke(UriTemplate = \"createpoi?name={name}&lat={latitude}&lng={longitude}&adr={address}&desc={photodescription}&story={poistory}\",Method = \"POST\")]
public String SetPoiPOST(string name,string latitude,string longitude,string address,string photodescription,string poistory)
{
int newid = -1;
POI_Man poimanager = new POI_Man();
MemoryStream resultstream = new MemoryStream();
if (!string.IsNullOrEmpty(name) &&
!string.IsNullOrEmpty(latitude) &&
!string.IsNullOrEmpty(longitude) &&
!string.IsNullOrEmpty(address) &&
!string.IsNullOrEmpty(photodescription) &&
!string.IsNullOrEmpty(poistory)
)
{
//newid = poimanager.CreatePOI_alt(address,name,photodescription,poistory);
newid = poimanager.CreatePOI(name,latitude,longitude,address,poistory);
poimanager.Generate(\"xml\");
resultstream = poimanager.WriteMessage(newid.ToString());
WebOperationContext.Current.OutgoingResponse.ContentType = \"text/plain\";
}
if (poimanager.NoError)
{
resultstream = poimanager.WriteMessage(newid.ToString());
WebOperationContext.Current.OutgoingResponse.ContentType = \"text/plain\";
//resultstream = (this.GetPoi(newid.ToString()) as MemoryStream);
}
else
{
resultstream = poimanager.WriteMessage(\"Beim anlegen des POI ist ein Fehler aufgetreten.\"
+ Environment.NewLine + \"Haben Sie einen Parameter vergessen?\");
WebOperationContext.Current.OutgoingResponse.ContentType = \"text/plain\";
}
return newid.ToString();
}
Web服务无法从客户端获得任何信息。难道我做错了什么?
我可以通过WebClient OpenWriteAsync通过POST请求与服务器联系。但是我需要服务器对lastID的响应,因此我改用UploadStringAsync。
请你帮助我好吗?
再见
洲
解决方法
尝试wc.UploadStringAsync(new Uri(\“ http:// localhost:80 / createpoi \”),\“ POST \”,参数),并记住对参数进行urlencode
, thx的意见!我现在知道REST服务的工作方式。它仅读取URL,而不读取UploadStringAsync()函数的参数。
因此,我重写了代码,它的工作原理就像一个魅力。
private void SavePoiRequest(MyPushpin pin)
{
WebClient wc = new WebClient();
wc.Headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";
wc.Encoding = Encoding.UTF8;
wc.UploadStringCompleted += new UploadStringCompletedEventHandler((sender,e) =>
{
if (e.Error != null)
{
return;
}
lastID = int.Parse(e.Result);
});
Uri baseAddressUri = new Uri(\"http://localhost:80/\");
UriTemplate uriTemplate = new UriTemplate(\"createpoi?name={name}&lat={latitude}&lng={longitude}&adr={address}&desc={photodesc}&story={poistory}\");
IDictionary<string,string> parameters = new Dictionary<string,string>();
parameters.Add(\"name\",pin.Name);
parameters.Add(\"latitude\",pin.Location.Latitude.ToString().Replace(\",\",\".\"));
parameters.Add(\"longitude\",pin.Location.Longitude.ToString().Replace(\",\".\"));
parameters.Add(\"address\",pin.Address);
parameters.Add(\"photodesc\",pin.PhotoDesc);
parameters.Add(\"poistory\",pin.Tag.ToString());
Uri formattedUri = uriTemplate.BindByName(baseAddressUri,parameters);
wc.UploadStringAsync(formattedUri,\"POST\");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。