【发布时间】:2014-01-20 01:11:54
【问题描述】:
我在 ASP.NET 4.0 网站中以两种不同的方式调用 Web 服务(同一网站中的 asmx 服务)方法。当 asmx Web 服务方法被 [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 修饰时,第一个方法成功并且总是返回一个有效的 JSON 对象。
但是第二种方法失败了,因为返回的数据是 XML 而不是 JSON,即使我已经用 [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 修饰了 asmx 方法(我不明白为什么使用 GET 时没有返回 JSON但这是在使用POST时?)
-
POST服务调用var serviceurl = "http://localhost:49441/WebService1.asmx/LoginUser" ; $.ajax({ url: serviceurl, type: 'POST', contentType: "application/json; charset=utf-8", data: JSON.stringify({ userName: userName, password: password }), dataType: "json", success: function (msg) { alert('Web service call succeeded. ' + msg.d); }, error: function (error) { alert('ERROR has occurred!'); alert(JSON.stringify(error)) } }); -
GET服务调用var serviceurl = "http://localhost:49441/WebService1.asmx/LoginUser" ; $.ajax({ url: serviceurl, type: 'GET', contentType: "application/json; charset=utf-8", data: 'userName='+ userName + '&password=' + password, dataType: "json", success: function (msg) { alert('Web service call succeeded. ' + msg.d); }, error: function (error) { alert('ERROR has occurred!'); alert(JSON.stringify(error)) } });
-
编辑 1:
Web 服务代码如下。使用
POST时,我只需将代码更改为使用UseHttpGet = false来调用被调用的方法。[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] [PrincipalPermission(SecurityAction.Assert, Unrestricted = true)] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public bool LoginUser(string userName, string password) { bool authenticated = false; if (userName.ToLower() == "mike" && password.ToLower() == "abcd") { authenticated = true; } return authenticated; } }
【问题讨论】:
-
这里的JS代码没有区别。为了理解为什么在您发布时返回 XML 而不是 JSON,我们需要查看 a) Web 服务代码或 b) Web 服务文档。
-
好的。让我添加 asmx Web 服务代码。
-
可能是启用 ajax 的 Web 服务只能通过 POST 而不是 jQuery 的 GET 调用,但不确定。
-
@Sunil jQuery 不关心你使用什么 HTTP 方法。 这不是客户端问题。
-
好的。当我使用带有 ScriptManager 的标准 JavaScript 方法调用相同的服务方法时,它工作正常,并且当我在 Fiddler 中检查它时它在幕后使用 GET。
标签: jquery asp.net asmx asp.net-4.0