Ocelot聚合器不适用于邮政方法
下午好社区。
我提出我的案子,然后问一个问题。
在ocelot.json中,i具有相应的配置,可以通过邮政消耗微服务方法。
我根据配置的路由执行请求,并正确响应。
然后我定义一个聚合物,因为我需要在将响应发送给客户端之前处理响应,但它会给我一个404。我认为我的路线配置正确,但找不到问题。
您能帮我吗?
ocelot.json
{
"Aggregates": [
{
"RouteKeys": [ "account" ],
"UpstreamPathTemplate": "/api/login",
"Aggregator": "LoginEmployeeAggregator"
}
],
"Routes": [
{
"DownstreamPathTemplate": "/api/employees/loginEmployee",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 44305
}
],
"UpstreamPathTemplate": "/api/account",
"UpstreamHttpMethod": [ "Post" ],
"Key": "account"
}
],
"GlobalConfiguration": {
"BaseUrl": "https://localhost:7014"
}
}
loginEmployeeaggregator.cs
public class LoginEmployeeAggregator : IDefinedAggregator
{
public async Task<DownstreamResponse> Aggregate(List<HttpContext> responses)
{
if (responses.Any(r => r.Items.Errors().Count > 0))
{
return new DownstreamResponse(null, HttpStatusCode.BadRequest, (List<Header>)null, null);
}
var userResponseContent = await responses[0].Items.DownstreamResponse().Content.ReadAsStringAsync();
var users = JsonConvert.DeserializeObject<List<UserDTO>>(userResponseContent);
var postByUserString = JsonConvert.SerializeObject(users);
var stringContent = new StringContent(postByUserString)
{
Headers = { ContentType = new MediaTypeHeaderValue("application/json") }
};
return new DownstreamResponse(stringContent, HttpStatusCode.OK, new List<KeyValuePair<string, IEnumerable<string>>>(), "OK");
}
}
startup.cs
//...
builder.Services.AddOcelot()//Registered 'AddOcelot' service.
.AddSingletonDefinedAggregator<LoginEmployeeAggregator>();
//...
致电邮寄到https:// localhost:7014/api/account- OK(200) 当致电邮寄到https:// localhost:7014/api/login-&gt;错误(404)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Ocelot仅支持HTTP GET方法。请参阅文档:
Ocelot supports Http GET method only. See documentation: Aggregation only supports the GET HTTP Verb.