【发布时间】:2011-05-10 15:33:56
【问题描述】:
我有一大段代码可以使用 HttpWebRequest 和 HttpWebResponse 但我想将其转换为使用 HttpClient 和 HttpResponseMessage。
这是有效的代码块......
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceReq);
request.Method = "POST";
request.ContentType = "text/xml";
string xml = @"<?xml version=""1.0""?><root><login><user>flibble</user>" +
@"<pwd></pwd></login></root>";
request.ContentLength = xml.Length;
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(xml);
dataStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
这是我想用它替换它的代码,如果我能让它工作的话。
/// <summary>
/// Validate the user credentials held as member variables
/// </summary>
/// <returns>True if the user credentials are valid, else false</returns>
public bool ValidateUser()
{
bool valid = false;
try
{
// Create the XML to be passed as the request
XElement root = BuildRequestXML("LOGON");
// Add the action to the service address
Uri serviceReq = new Uri(m_ServiceAddress + "?obj=LOGON");
// Create the client for the request to be sent from
using (HttpClient client = new HttpClient())
{
// Initalise a response object
HttpResponseMessage response = null;
// Create a content object for the request
HttpContent content = HttpContentExtensions.
CreateDataContract<XElement>(root);
// Make the request and retrieve the response
response = client.Post(serviceReq, content);
// Throw an exception if the response is not a 200 level response
response.EnsureStatusIsSuccessful();
// Retrieve the content of the response for processing
response.Content.LoadIntoBuffer();
// TODO: parse the response string for the required data
XElement retElement = response.Content.ReadAsXElement();
}
}
catch (Exception ex)
{
Log.WriteLine(Category.Serious,
"Unable to validate the Credentials", ex);
valid = false;
m_uid = string.Empty;
}
return valid;
}
我认为问题在于创建内容对象并且未正确附加 XML(可能)。
【问题讨论】:
-
究竟是什么不起作用?它不会编译吗?或者你得到运行时错误?哪些错误?
-
请求已发送,但处理入站请求的服务认为没有数据,因此返回“未授权访问”,这是该服务的默认响应。
-
使用 Fiddler 并检查通过网络发送的内容...
-
@fretje 感谢您指导使用 Fiddler。经过很多困难,我现在设法让提琴手工作并捕获每种方法的请求/响应。有2个不同。工作代码在原始数据中有 并且内容类型是 text/xml。非工作代码不包括 并且内容类型设置为 application/xml。我的下一步是研究如何更改内容类型。
标签: c# wcf httpwebrequest httpclient