Following the documentation linked above, it seems there’s still a part missing in your client initialization, namely the ForcePathStyle parameter which is why you’re getting an issue. Basically, by default, your client will prepend the bucket name to the host, and LocalStack won’t pick it up if you’re not setting ApplicationConstants.LocalStackURL to "http://s3.localhost.localstack.cloud:4566".
Anyway, could you give it a try with this configuration?
if (environment.Equals(ApplicationConstants.LocalEnv, StringComparison.CurrentCultureIgnoreCase))
{
var awsOptions = new AWSOptions();
awsOptions.DefaultClientConfig.ServiceURL = ApplicationConstants.LocalStackURL;
awsOptions.DefaultClientConfig.AuthenticationRegion = "ap-southeast-2";
awsOptions.DefaultClientConfig.ForcePathStyle = true;
services.AddDefaultAWSOptions(awsOptions);
}