6

我试图通过 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
    }
}

但是,如果我尝试向上传递一个复杂类型,则参数始终为空:

客户:

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 之外执行此操作,但我试图让我的所有服务器端调用都通过同一管道运行。

是否有可能做到这一点?

4

2 回答 2

4

您可能缺少 [FromUri] 属性。任何时候我试图传递一个更复杂的对象或一组参数,在我添加该属性之前,一切都会返回为空。

[BreezeController]
public class AccountController : ApiController
{
    [HttpGet]
    public LoginResult Authenticate([FromUri] LoginRequest loginRequest)
    {
        // Object for loginRequest always null
    }
}
于 2013-11-11T11:49:23.447 回答
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 });
于 2013-04-04T17:08:24.107 回答