Attributes Reference
Benzene uses attributes to declare the contract of a message handler — its topic and the transports that route to it — so they're discovered by reflection with no manual registration. This page lists every attribute you apply when authoring handlers.
[Message]
Package: Benzene.Core.MessageHandlers · Namespace: Benzene.Core.MessageHandlers ·
Target: class (not inherited)
Maps a message handler to its topic — the stable identifier every transport routes by. Every handler needs exactly one.
public MessageAttribute(string topic, string version = "")
| Property | Purpose |
|---|---|
Topic |
The topic the handler responds to (e.g. "order:create"). |
Version |
Optional contract version, for running versioned message contracts side by side. Defaults to "". |
[Message("order:create")]
public class CreateOrderHandler : IMessageHandler<CreateOrderRequest, OrderDto> { /* … */ }
[Message("order:create", "v2")]
public class CreateOrderHandlerV2 : IMessageHandler<CreateOrderRequestV2, OrderDto> { /* … */ }
See Message Handlers.
[HttpEndpoint]
Package: Benzene.Http · Namespace: Benzene.Http · Target: class (repeatable)
Maps an HTTP method and URL pattern onto the handler's topic, so HTTP transports (ASP.NET Core, API Gateway, Azure Functions HTTP) can route to it. Apply it multiple times to expose one handler at several routes.
public HttpEndpointAttribute(string method, string url)
| Property | Purpose |
|---|---|
Method |
The HTTP method — GET, POST, PUT, DELETE, PATCH, etc. |
Url |
The URL pattern; may include route parameters like {id}, bound onto the request. |
[Message("user:get")]
[HttpEndpoint("GET", "/users/{id}")]
[HttpEndpoint("GET", "/api/users/{id}")]
public class GetUserHandler : IMessageHandler<GetUserRequest, GetUserResponse> { /* … */ }
Route parameters ({id}) are bound onto the matching property of the request type. See
ASP.NET Core and Getting Started.
[GrpcMethod]
Package: Benzene.Grpc · Namespace: Benzene.Grpc · Target: class (repeatable)
Maps a gRPC method onto the handler's topic so the gRPC transport can route calls to it. Repeatable, to serve several methods from one handler.
public GrpcMethodAttribute(string method)
| Property | Purpose |
|---|---|
Method |
The gRPC method name to route to this handler. |
[Message("greeter:hello")]
[GrpcMethod("Greeter/SayHello")]
public class SayHelloHandler : IMessageHandler<HelloRequest, HelloResponse> { /* … */ }
[ValidationStatus]
Package: Benzene.Abstractions.Validation · Namespace: Benzene.Abstractions.Validation ·
Target: class (applied to the message handler type, not the request type)
Overrides the result status returned when validation fails for the annotated handler — use it to
control how a validation failure is surfaced (e.g. a specific status code). Honoured by all three
validation adapters (Benzene.FluentValidation, Benzene.DataAnnotations, Benzene.JsonSchema)
via a shared IValidationStatusMapper, resolved from DI; absent a registered mapper, each adapter
keeps its own default validation-error status.
public ValidationStatusAttribute(string status)
| Property | Purpose |
|---|---|
Status |
The result status to return on validation failure. |
[ValidationStatus("bad-request")]
public class CreateOrderHandler : IMessageHandler<CreateOrderRequest, CreateOrderResponse> { /* … */ }
See Fluent Validation and Data Annotations.
Tooling note:
[Arg](Benzene.CodeGen.Cli.Core) configures arguments for the code-generation CLI itself and is not part of the handler-authoring surface — you won't apply it to your own message handlers.
See also
- Message Handlers — where these attributes are applied.
- Middleware Reference — the pipeline steps that act on routed messages.
- Package Reference — which package each attribute ships in.