使用JSON作为WCF Restservice方法的参数

时间:2011-08-08 14:38:29

标签: javascript .net wcf json rest

我希望你可以提供帮助,我尝试升级破损的登录系统,以便在转换登录凭据时使用POST代替GET。

它永远不会到达实际的方法,因此问题出现在界面和我的javascript之间。

界面:

[OperationContract]
        [WebInvoke(Method = "POST", 
            BodyStyle = WebMessageBodyStyle.WrappedRequest,
            ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json, 
            UriTemplate = "/DoLogin")]
        LoginKey DoLogin(string email, string password,string tenant);

使用Javascript:

 $.ajax({
            type: "POST",
            url: "RestService.svc/DoLogin",
            data:'{"email":"' + encodeURIComponent(email) + '","password":"' + encodeURIComponent(password) + '","tenant":"' + encodeURIComponent(tenant) + '"}',
            dataType: "json",
            cache: false,
            success: function (loginKey) {
... rest of method

我发送的JSON数据有效: {     “电子邮件”:“邮件”,     “密码”:“somepassword”,     “租客”:“tenantid” } 有什么想法在这里出错吗?它与GET一起工作得很好

ps这是实际登录休息服务方法的第一行:

public LoginKey DoLogin(string email, string password, string tenant)
        {

2 个答案:

答案 0 :(得分:2)

尝试设置内容类型,以防万一:

键入:“POST”,
url:“RestService.svc / DoLogin”, 数据:'{“email”:“'+ encodeURIComponent(email)+'”,“password”:“'+ dataType:“json”,
“contentType”:“application / json; charset = utf-8”, ...

除此之外,您的代码看起来是正确的,尽管我更喜欢不同的方法:

public class Credential
{
  public string Email{get;set;}
  public string Password {get;set;}
  public string Tenant {get;set;}
}

在您的WCF方法中:

public LoginKey DoLogin(Credential theCredential)

在你的标记中:

var theCreadential = new Object();
theCreadential.Email = $('#txtEmail').val();
theCreadential.Password = $('#txtPassword').val();
theCreadential.Tenant = $('#txtTenant').val();
 $.ajax({
            type: "POST",
            url: "RestService.svc/DoLogin",
            data: "{'theCredential': " + JSON.stringify(theCredential) + "}",
            dataType: "json",
            cache: false,
            success: function (loginKey) {
... rest of method

答案 1 :(得分:0)

我决定放弃整个restservice,而是将项目迁移到MVC3,MVC3处理这些场景变得更加简单和容易。

通过向ajax调用btw:

添加contentType来解决该问题
 $.ajax({
            type: "POST",
            url: "restservice.svc/dologin",
            data: JSON.stringify(json),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            success: function (result) {