App runs forever without responding

No the code-base doesn’t have strict nulls enabled, weird to go ahead and assume every library has converted their existing code-base to use the latest language features.

It’s irrelevant regardless, ServiceStack wont be breaking every existing App by releasing a version that just starts treating string as a required property. It’s especially common for Message-based APIs to define coarse-grained Services with optional properties that is especially prevalent when organically versioning & evolving Services defensively.

Note the existing knowledge-base in docs, forums, projects & StackOverflow answers is very googable where if a presumed feature isn’t documented anywhere it doesn’t exist.

No the [Required] attribute is used by OrmLite to create non null properties which should only be annotated on Data Model DTOs, not Operation Request DTOs. You would use the Open API Attributes to further annotate your Services but this is just adds documentation, they don’t change behavior.

By default ServiceStack doesn’t enforce a validation library enabled by default, it takes care of populating your DTO and executing it through the Request Pipeline but doesn’t impose a validation library to use, by default it handles .NET Exceptions thrown within your implementation and converts them to the appropriate HTTP Error Response as per Error Handling docs.

ServiceStack does include support for Fluent Validation through ServiceStack’s Validation ValidationFeature plugin, which has been extended the latest v5.8.1 pre-release version on MyGet to include declarative validation attributes, which provides an alternative way of registering fluent validation validators instead of using its Fluent C# API.

I’ve just added typed version of common validators in the latest v5.8.1 which you’ll need to clear your NuGet packages to download the latest version.

So instead of string validator references in Request DTO [ValidateRequest] or property [Validate] you can use:

Typed ValidateRequest Attributes

[ValidateIsAuthenticated]
[ValidateIsAdmin]
[ValidateHasRole(role)]
[ValidateHasPermission(permission)]

Property Validate Attributes

[ValidateNull]
[ValidateEmpty]
[ValidateEmail]
[ValidateNotNull]
[ValidateNotEmpty]
[ValidateCreditCard]

So now the recommended way to both annotate properties as required & validate them is to use the [ValidateNotNull] attribute (equivalent to [Validate("NotNull")]). Don’t forget to register the ValidationFeature plugin.