在Angular 4中通过JSON RPC发布请求

时间:2017-11-01 10:00:43

标签: angular httpclient json-rpc

尝试使用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请求有什么问题?

提前谢谢你,

2 个答案:

答案 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[]
}