我正在尝试通过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之外执行此操作,但我正在尝试保持所有服务器端调用都在同一个管道中运行。
是否可以这样做?
答案 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 });