所以我在两个视图之间有一个主/细节场景。母版页显示一个列表,在单击其中一个项目后,我通过Aurelia中的EventAggregator向子视图发送一条消息,其中包含反序列化的dto(来自主服务器的所选项)作为消息的有效负载。 / p>
然而,当我尝试将此项作为子项中后续请求的参数传递时(为了获取其他信息),有效负载对象无法序列化。
Master.ts:
import { JsonServiceClient } from "servicestack-client";
import {
ListPendingHoldingsFiles,
ListPendingHoldingsFilesResponse,
SendHoldings,
PositionFileInfo
} from "../holdingsManager.dtos";
import { inject, singleton } from "aurelia-framework";
import { Router } from "aurelia-router";
import { EventAggregator } from "aurelia-event-aggregator";
import { GetPendingPositionMessage } from "../common/GetPendingPositionMessage";
@singleton()
@inject(Router, EventAggregator)
export class Pending {
router: Router;
positions: PositionFileInfo[];
client: JsonServiceClient;
eventAgg: EventAggregator;
constructor(router, eventAggregator) {
this.router = router;
this.eventAgg = eventAggregator;
this.client = new JsonServiceClient('/');
var req = new ListPendingHoldingsFiles();
this.client.get(req).then((getHoldingsResponse) => {
this.positions = getHoldingsResponse.PositionFiles;
}).catch(e => {
console.log(e); // "oh, no!"
});
}
openHoldings(positionInfo) {
this.eventAgg.publish(new GetPendingPositionMessage(positionInfo));
this.router.navigate('#/holdings');
}
}
Child.ts:
import { JsonServiceClient } from "servicestack-client";
import { inject, singleton } from "aurelia-framework";
import { Router } from 'aurelia-router';
import { EventAggregator } from "aurelia-event-aggregator";
import { GetPendingPositionMessage } from "../common/GetPendingPositionMessage";
import {
GetPendingHoldingsFile,
GetPendingHoldingsFileResponse,
Position,
PositionFileInfo
} from "../holdingsManager.dtos";
@singleton()
@inject(Router, EventAggregator)
export class Holdings {
router: Router;
pendingPositionFileInfo: PositionFileInfo;
position: Position;
client: JsonServiceClient;
eventAgg: EventAggregator;
constructor(router, eventAggregator) {
this.router = router;
this.eventAgg = eventAggregator;
this.eventAgg.subscribe(GetPendingPositionMessage,
message => {
this.pendingPositionFileInfo = message.fileInfo;
});
}
activate(params, routeData) {
this.client = new JsonServiceClient('/');
var req = new GetPendingHoldingsFile();
req.PositionToRetrieve = this.pendingPositionFileInfo;
this.client.get(req).then((getHoldingsResponse) => {
this.position = getHoldingsResponse.PendingPosition;
}).catch(e => {
console.log(e); // "oh, no!"
});
}
}
因此,当孩子激活并尝试发送请求'GetPendingHoldingsFile'时会发生错误。
Failed to load resource: the server responded with a status of 500 (NullReferenceException)
我已经验证了子中的this.pendingPositionFileInfo不为null或为空,而在服务器端,该对象未被接收(它为null)。我是Aurelia的新手,对Javascript没有太多经验,所以我必须遗漏一些东西,任何建议都会受到赞赏。
修改1
这与我与ServiceStack的交互方式似乎有些不对劲。我正在使用serviceStack的4.5.6版本和servicestack-client@^0.0.17。我尝试新建一个dto(PositionFileInfo)的新副本并复制父视图中的所有值,以确保没有一些我不知道的javascript类型转换怪异,但即使是新鲜的dto webservice仍然收到一个空请求。
答案 0 :(得分:1)
切换来自' client.get(...)'到' client.post(...)'解决了这个问题。显然,尝试在URL中序列化对象并不是一个好计划。