尝试使用Angular 4 HttpClient从服务器接收JSON RPC数据。
收到的错误是
public class Program
{
static void Main(string[] args) {
using (var context = new ZContext()) {
Console.WriteLine($"Curve Supported: {ZeroMQ.ZContext.Has("curve")}");
byte[] serverPublicKey;
byte[] serverSecretKey;
Z85.CurveKeypair(out serverPublicKey, out serverSecretKey);
var publisher = new ZSocket(context, ZSocketType.PUB);
publisher.CurvePublicKey = serverPublicKey;
publisher.CurveSecretKey = serverSecretKey;
publisher.CurveServer = true;
publisher.Bind("tcp://*:5050");
var subscriber = new ZSocket(context, ZSocketType.SUB);
byte[] subPublicKey;
byte[] subSecretKey;
Z85.CurveKeypair(out subPublicKey, out subSecretKey);
subscriber.CurvePublicKey = subPublicKey;
subscriber.CurveSecretKey = subSecretKey;
subscriber.CurveServerKey = serverPublicKey;
ZError connectError;
subscriber.Connect("tcp://mybox:5050", out connectError);
if (connectError != null) {
Console.WriteLine($"Connection error: {connectError.Name} - {connectError.Number} - {connectError.Text}");
}
subscriber.SubscribeAll();
// Publish some messages
Task.Run(() => {
for (var i = 1; i <= 5; i++) {
var msg = $"Pub msg: {Guid.NewGuid().ToString()}";
using (var frame = new ZFrame(msg)) {
publisher.Send(frame);
}
}
});
Task.Run(() => {
// Receive some messages
while (true) {
using (var frame = subscriber.ReceiveFrame()) {
var msg = frame.ReadString();
Console.WriteLine($"Received: {msg}");
}
}
});
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
ZError subError;
subscriber.Disconnect("tcp://mybox:5050", out subError);
subscriber.Dispose();
ZError pubError;
publisher.Disconnect("tcp://*:5050", out pubError);
publisher.Dispose();
}
}
}
。
命令是:
{code: -32600, message: "INVALID_JSON_REQUEST: The JSON sent is not a valid JSON-RPC Request object"}
Angular应用程序的实现:
curl -i -X POST -d '{"jsonrpc": "2.0", "id": "1", "method": "command", "params": {"name":"get names","parameters": {"datasets": null},"destination":"http://172.16.106210:9100","source":"TESTER"}}' http://172.16.106.210:9100
此JSON请求有什么问题?
提前谢谢你,
答案 0 :(得分:0)
尝试将Content-Type标头设置为application/json-rpc
?
检查它是否与此link中指定的格式匹配?
答案 1 :(得分:0)
基于此处讨论的工作示例:
@Injectable({
providedIn: 'root'
})
export class Service {
public encoder: HttpParameterCodec;
public defaultHeaders = new HttpHeaders();
constructor(protected httpClient: HttpClient) {}
public createBriefing(
briefingData: Briefing //: Observable<any>
) {
const url = "some.url";
let headers = new HttpHeaders();
headers.append("Content-Type", "application/json");
let body= new JsonRpcBody();
body.id = briefingData.id;
body.method = "query";
body.params = briefingData.params;
this.httpClient
.post(url, JSON.stringify(body), { headers: headers })
.subscribe(response => console.log(response));
}
}
export class JsonRpcBody {
id:string;
method: string;
params: BriefingParameters[]
}
export class BriefingParameters {
id: string;
reportTypes: string[]
stations: string[]
countries: string[]
}