Mat*_*att 42 asp.net asp.net-mvc asp.net-web-api
我想要我的WEB API方法将XML对象返回给调用应用程序.目前它只是将XML作为字符串对象返回.这不是不是吗?如果是这样,你怎么告诉webapi get方法它返回XML类型的对象?
谢谢
编辑:Get方法的示例:
[AcceptVerbs("GET")]
public HttpResponseMessage Get(int tenantID, string dataType, string ActionName)
{
List<string> SQLResult = MyWebSite_DataProvidor.DB.spReturnXMLData
("SELECT * FROM vwContactListing FOR XML AUTO, ELEMENTS").ToList();
string AllResults = "";
for (int i = 0; i < SQLResult.Count - 1; i++)
{
AllResults += SQLResult[i];
}
string sSyncData = "<?xml version=\"1.0\"?> " + AllResults;
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StringContent(sSyncData);
return response;
}
Run Code Online (Sandbox Code Playgroud)
它有点hacky因为我仍处于原型设计阶段.当我证明其可行时,将重构.
小智 86
如果您不希望控制器决定返回对象类型,则应将方法返回类型设置为,System.Net.Http.HttpResponseMessage
并使用以下代码返回XML.
public HttpResponseMessage Authenticate()
{
//process the request
.........
string XML="<note><body>Message content</body></note>";
return new HttpResponseMessage()
{
Content = new StringContent(XML, Encoding.UTF8, "application/xml")
};
}
Run Code Online (Sandbox Code Playgroud)
这是始终从Web API返回XML的最快方法.
Ada*_*ter 41
如果返回可序列化对象,WebAPI将根据客户端发送的Accept标头自动发送JSON或XML.
如果你返回一个字符串,你会得到一个字符串.
Aar*_*nLS 21
这是与IHttpActionResult返回类型兼容的另一种方法.在这种情况下,我要求它使用XML Serializer(可选)而不是Data Contract序列化程序,我正在使用,return ResponseMessage(
以便我获得与IHttpActionResult兼容的返回:
return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ObjectContent<SomeType>(objectToSerialize,
new System.Net.Http.Formatting.XmlMediaTypeFormatter {
UseXmlSerializer = true
})
});
Run Code Online (Sandbox Code Playgroud)
Hab*_*bib 18
您应该只返回您的对象,而不应该关注它的XML或JSON.客户端负责从Web API请求JSON或XML.例如,如果使用Internet Explorer进行调用,则请求的默认格式为Json,Web API将返回Json.但是,如果您通过谷歌浏览器提出请求,则默认请求格式为XML,您将获得XML.
如果使用Fiddler发出请求,则可以将Accept标头指定为Json或XML.
Accept: application/xml
Run Code Online (Sandbox Code Playgroud)
您可能希望看到这篇文章:ASP.NET MVC4 Web API Beta中的内容协商 - 第1部分
编辑:根据您编辑的问题和代码:
简单的字符串返回列表,而不是将其转换为XML.尝试使用Fiddler.
public List<string> Get(int tenantID, string dataType, string ActionName)
{
List<string> SQLResult = MyWebSite_DataProvidor.DB.spReturnXMLData("SELECT * FROM vwContactListing FOR XML AUTO, ELEMENTS").ToList();
return SQLResult;
}
Run Code Online (Sandbox Code Playgroud)
例如,如果您的列表如下:
List<string> list = new List<string>();
list.Add("Test1");
list.Add("Test2");
list.Add("Test3");
return list;
Run Code Online (Sandbox Code Playgroud)
并指定Accept: application/xml
输出将是:
<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>Test1</string>
<string>Test2</string>
<string>Test3</string>
</ArrayOfstring>
Run Code Online (Sandbox Code Playgroud)
如果在请求中指定'Accept:application/json',则输出将为:
[
"Test1",
"Test2",
"Test3"
]
Run Code Online (Sandbox Code Playgroud)
因此,让客户端请求内容类型,而不是发送自定义的xml.
归档时间: |
|
查看次数: |
105226 次 |
最近记录: |