在此RabbitMQ文档中,MQTT,AMQP和STOMP称为支持的消息协议.如果你考虑MQTT,AMQP和STOMP之间的差异,这对我来说是完全可以理解的.但是,在本文的最后,它变得令人困惑.这是关于HTTP的.本段指出"HTTP不是课程而不是消息传递协议".我曾认为RabbitMQ也会以某种方式直接支持HTTP,但仅支持"低容量消息传递"(例如诊断)以及直接在HTML中使用.如果世界上有一半使用HTTP Web api服务,那么为什么HTTP无法在消息传递协议之间共享.为什么HTTP不是消息传递协议,RabbitMQ使用消息传递协议的定义是什么?
我重新编写了Angular 2英雄教程,以便在带有Web API的ASP.NET web应用程序中运行,并与该Web API进行通信,而不是内存中的Web API.一切都很好.只剩下一个问题:
在ASP.NET的服务环境和Angular环境中,我使用对象Hero.C#对象中属性的命名约定是使用大写字母开始属性名称.JS中的命名约定是以小写形式启动属性名称.我更喜欢在编码中遵循这些惯例.如果我这样做,对象当然不再在接收站点反序列化了.这通常如何处理?
ASP.NET控制器中的get(数组):
// GET api/heroes
public HttpResponseMessage Get()
{
String heros = JsonConvert.SerializeObject(GetHeroes().ToArray<Hero>());
return new HttpResponseMessage()
{
Content = new StringContent(heros, System.Text.Encoding.UTF8, "application/json")
};
}
Run Code Online (Sandbox Code Playgroud)
GetHeroes()返回一个Hero列表:
public class Hero
{
public int id { get; set; }
public string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
hero.service.ts中的代码:
getHeroes(): Promise<Hero[]> {
return this.http.get(this.heroesUrl)
.toPromise()
.then(response => response.json() as Hero[])
.catch(this.handleError); }
Run Code Online (Sandbox Code Playgroud)
最后是hero.ts中的英雄课:
export class Hero { id: number; name: string;}
Run Code Online (Sandbox Code Playgroud)
Web服务为get提供的原始代码是:
[{"id":0,"name":"Zero"},{"id":11,"name":"Mr. Nice"},{"id":12,"name":"Narco"},{"id":13,"name":"Bombasto"},{"id":14,"name":"Celeritas"},{"id":15,"name":"Magneta"}]
Run Code Online (Sandbox Code Playgroud)
问题是如何在C#中继续使用(这会导致问题)
public class …Run Code Online (Sandbox Code Playgroud) .net-core ×1
amqp ×1
angular ×1
asp.net-core ×1
c# ×1
http ×1
rabbitmq ×1
stomp ×1
web-services ×1