Web API不将bool返回类型序列化为json布尔值

9 c# json boolean asp.net-web-api angularjs

我有这个ASP.NET Web API方法:

[HttpGet]
public bool IsCodeValid(string code)
{
    return db.Usagers.Any(u => u.CodeAcces == code);
}
Run Code Online (Sandbox Code Playgroud)

我从Angularjs的$ http.get方法调用这个Web API方法:

return $http.get("/lewis/production/clockin/iscodevalid?code=" + code);
Run Code Online (Sandbox Code Playgroud)

这是结果:

[object Object]{config: Object {...}, data: "false", status: 200, statusText: "OK"}
Run Code Online (Sandbox Code Playgroud)

查看data属性,它是"false"(作为字符串).

我希望它是一个原始的布尔值,所以,回到我的javascript客户端代码,我能做到

if (result.data) {
  // do something if the result is true ...
}
Run Code Online (Sandbox Code Playgroud)

因为现在,我必须做这个丑陋的事情:

if (result.data == "true") {
}
Run Code Online (Sandbox Code Playgroud)

我从自定义"userService"服务获得结果:

userService.isCodeValid($scope.code).then(function (result)
{
    console.log(result);
});
Run Code Online (Sandbox Code Playgroud)

这是我的userService中isCodeValid方法的代码:

angular.module('clockin').service('userService', ['$http',
    function ($http) {
        this.isCodeValid = function (code) {
            return $http.get("/lewis/production/clockin/iscodevalid?code=" + code);
        };
    }
]);
Run Code Online (Sandbox Code Playgroud)

知道我错过了什么吗?

Rob*_*evy 13

JSON是JS Object Notation.你没有返回一个物体,只是一个布尔.没有服务器响应主体被包装在{ .. }浏览器中只能假设它从服务器获得的这个字符串实际上只是一个字符串.将服务响应包装在对象中,bool属性将序列化为bool.

您甚至不需要为此目的定义新类:

[HttpGet]
public object IsCodeValid(string code)
{
    return new { result: db.Usagers.Any(u => u.CodeAcces == code) };
}
Run Code Online (Sandbox Code Playgroud)

(然后相应地更改客户端)

另一种方法是修改JS以将字符串转换为bool.