小编典典

如何将JSON对象读取到WebAPI

ajax

我检查了一些类似的问题,但似乎没有一个合适的答案(或对我来说足够愚蠢)。因此,我有一个非常简单的WebAPI来检查DB中是否存在带有电子邮件的用户。

AJAX:

var param = { "email": "ex.ample@email.com" };
$.ajax({
    url: "/api/User/",
    type: "GET",
    data: JSON.stringify(param),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        if (data == true) {
            // notify user that email exists
        }
        else {
            // not taken
        }             
    }                      
});

WebAPI:

public bool Get(UserResponse id)
{
    string email = id.email;
    UserStore<ApplicationUser> userStore = new UserStore<ApplicationUser>();
    ApplicationUserManager<ApplicationUser> manager = new ApplicationUserManager<ApplicationUser>(userStore);
    ApplicationUser user = manager.FindByEmail(email);

    if (user != null)
    {
        return true;
    }

    else
    {
        return false;
    }
}

//helper class:
public class UserResponse
{
    public string email { get; set; }
}

现在很明显,这是行不通的。Ajax调用工作正常,但是如何将json对象解析为WebAPI以便能够像调用它一样id.email
编辑
我无法将电子邮件地址作为字符串传递,因为逗号弄乱了路由。
ajax调用工作正常,该对象被发送到WebAPI。问题是我无法在后面的代码中解析对象。


阅读 248

收藏
2020-07-26

共1个答案

小编典典

问题:您当前的实现是根据GET请求将电子邮件作为实体发送。这是一个问题,因为GET请求不包含实体HTTP /
1.1方法
解决方案:将请求更改为POST

现在,由于您正在将电子邮件从客户端发送到api,因此必须将API实现更改为POST:

public bool Post(UserResponse id)

为了确保您发布的实体正确绑定,可以使用[FromBody]如下方式:

public bool Post([FromBody] UserResponse id)

如果执行此操作(并且尚未覆盖默认的模型绑定器),则必须对模型进行注释,例如:

[DataContract]
public class UserResponse
{
    [DataMember]
    public string email { get; set; }
}

我认为就是全部-希望它能起作用:)

2020-07-26