跳到主要内容

AutoController

Convention

CQRS模式接口惯例

基本路由规则:api/v1/{DomainName(PascalCase)}/{method-name(KebabCase)}

如果接口方法未定义 HttpGet 等特性,则根据请求类自动转换方法名为方法路由: 如 QueryGetUserName,将会移除 Query 以及 Get,并变换 UserNameuser-name

Query 请求默认使用 Get 方法, Command 请求默认使用 Post 方法。

客户端API生成

根据

public class CommandHandlerMessageReceive : OurApplicationService<CommandHandlerMessageReceive, CommandMessageReceive, Res<ResponseMessageReceive>>  
{
[HttpPost("in-messages")]
public override async Task<Res<ResponseMessageReceive>> Handle(CommandMessageReceive request,
CancellationToken cancellationToken)
{

}
}

生成接口:

[ServiceContract]
public interface ICommandMessage : IMoRpcApi
{
/// <summary>
/// <inheritdoc cref="CommandMessageReceive"/>
/// </summary>
[OperationContract]
[MustUseReturnValue]
public Task<Res<ResponseMessageReceive>> MessageReceive(CommandMessageReceive req);
}

以及HTTP实现(后续要支持生成gRPC实现):

  
public class CommandMessageHttpApi(HttpClient httpClient, IMoServiceProvider provider) : OurHttpApi(provider, httpClient), ICommandMessage
{
public async Task<Res<ResponseMessageReceive>> ReceiveMessage(CommandMessageReceive commandMessage)
{
return await _httpClient.PostAsJsonAsync("api/v1/Message/in-messages", commandMessage).GetResponse<Res<ResponseMessageReceive>>();
}
}