我正在使用一些 ASP.NET PageMethods,我尝试使用以下方法简单地返回 XML:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static string GetIPLocation(string ip)
{
var doc = XDocument.Load(HttpContext.Current.Server.MapPath("relative xml path"));
var s = doc.ToString();
return s;
}
完全相同的代码实际上适用于 ASMX 服务,(尽管删除了static
修饰符)
但事实证明,在使用 PageMethods 时我无法获取 XML,而是收到了我的页面的 HTML 代码。
这是我的 AJAX 代码:
$.ajax({
url: "<%: this.ResolveClientUrl("~/relative path/GetIPLocation") %>",
type: "POST",
contentType: "application/xml; charset=utf-8;",
dataType: "xml",
data: "{ip:'"+$target.val()+"'}",
async: true,
cache: false,
success: function (msg) {
console.log("MSG: %o", msg);
viewModel.ip1(msg.d.IP);
},
error: function (XHResponse, errorMessage, errorCode) {
console.log("AJAX Error: %o", XHResponse);
}
});
如果我将响应更改为 JSON,或者如果我使用 ASMX/WCF 服务而不是我的 PageMethod,它就像一个魅力
那么 PageMethods 是否无法通过设计返回 XML?...如果不是,我错过了什么?
编辑 1
正如@JamieSee 评论的那样,我做了这个修改,结果还是一样:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static XDocument(GetIPLocation(string ip)
{
return XDocument.Load(HttpContext.Current.Server.MapPath("relative xml path"));
}
和
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static XmlDocument(GetIPLocation(string ip)
{
var x = new XmlDocument();
x.LoadXml(HttpContext.Current.Server.MapPath("relative xml path"));
return x;
}