将对象作为参数传递给Breeze控制器操作

时间:2013-04-04 15:21:43

标签: asp.net-web-api breeze

我正在尝试通过Breeze将对象作为参数发送而没有成功。

使用以下代码我可以发送基本类型:

客户端:

var query = EntityQuery
    .from('account/authenticate')
    .withParameters({ loginRequest: "hello" });

服务器:

[BreezeController]
public class AccountController : ApiController
{
    [HttpGet]
    public LoginResult Authenticate(string loginRequest)
    {
        // String for loginRequest received successfully
    }
}

但是,如果我尝试传递复杂类型,则param始终为null:

客户端:

var loginRequest = { userName: 'me', password: 'pass' };

var query = EntityQuery
    .from('account/authenticate')
    .withParameters({ loginRequest: loginRequest });

服务器:

[BreezeController]
public class AccountController : ApiController
{
    [HttpGet]
    public LoginResult Authenticate(LoginRequest loginRequest)
    {
        // Object for loginRequest always null
    }
}

我相信这部分是因为Breeze总是使用GET进行查询。 POST可能正确处理序列化,但我无法在Breeze API中看到任何强制POST的方法。

如果我传递了对象的JSON字符串表示,我可以在服务器端获取它,但这需要手动反序列化。我意识到我可以通过标准的WebAPI调用在Breeze之外执行此操作,但我正在尝试保持所有服务器端调用都在同一个管道中运行。

是否可以这样做?

2 个答案:

答案 0 :(得分:4)

您可能缺少[FromUri]属性。每当我尝试传递更复杂的对象或参数集时,一切都将返回为null,直到我添加该属性。

[BreezeController]
public class AccountController : ApiController
{
    [HttpGet]
    public LoginResult Authenticate([FromUri] LoginRequest loginRequest)
    {
        // Object for loginRequest always null
    }
}

答案 1 :(得分:0)

为什么不使用 - >

var loginRequest = { userName: 'me', password: 'pass' };

var query = EntityQuery
   .from('account/authenticate')
   .withParameters( loginRequest);

而不是

var loginRequest = { userName: 'me', password: 'pass' };

var query = EntityQuery
   .from('account/authenticate')
   .withParameters({ loginRequest: loginRequest });