gimg1 gimg1 - 1 month ago 17
C# Question

No error messages with Fluent Validation in ServiceStack

I am just starting to familiarise myself with ServiceStack and have come upon FluentValidation. I have followed the introductions and created a small Hello App.

My problem is that when I try to validate the request DTO no error messages are returned to describe how it failed validation, only a blank Json object

{}
.

Myself, I think the validation is autowired to the DTO so there should be no need for me to write any extra code.

The answer is probably blatant but I cannot see it. Any help would be greatly appreciated. My code is below:

namespace SampleHello2
{
[Route("/hello")]
[Route("/hello/{Name}")]
public class Hello
{
public string Name { get; set; }
}

public class HelloResponse
{
public string Result { get; set; }
}


public class HelloService : Service
{
public object Any(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}

public class HelloValidator : AbstractValidator<Hello>
{
public HelloValidator()
{
//Validation rules for all requests
RuleFor(r => r.Name).NotNull().NotEmpty().Equal("Ian").WithErrorCode("ShouldNotBeEmpty");
RuleFor(r => r.Name.Length).GreaterThan(2);
}
}

public class Global : System.Web.HttpApplication
{
public class HelloAppHost : AppHostBase
{
//Tell Service Stack the name of your application and where to find your web services
public HelloAppHost() : base("Hello Web Services", typeof(HelloService).Assembly) { }

public override void Configure(Funq.Container container)
{
//Enable the validation feature
Plugins.Add(new ValidationFeature());
container.RegisterValidators(typeof(HelloValidator).Assembly);
//register any dependencies your services use, e.g:
// container.Register<ICacheClient>(new MemoryCacheClient());
}
}

//Initialize your application singleton
protected void Application_Start(object sender, EventArgs e)
{
new HelloAppHost().Init();
}
}
}


P.S. Really enjoying using ServiceStack, It really is a fantastic project so thanks.

Edit

So for example:

Calling:
http://localhost:60063/hello/Ian?format=json
returns
{"Result":"Hello, Ian"}
.
Whereas Calling:
http://localhost:60063/hello/I?format=json
returns
{}
.

The second call returns
{}
where I was expecting auto generated error messages.

Answer

I found the answer. It was an overlook on my behalf:

This was in the documentation and I overlooked it:

All Error handling and validation options described below are treated in the same way - serialized into the ResponseStatus property of your Response DTO making it possible for your clients applications to generically treat all Web Service Errors in the same way.

So all that was missing from my code was to add the following line into the HelloResponse class.

public ResponseStatus ResponseStatus { get; set; }