ServiceStack中的Fluent验证没有错误消息

时间:2013-03-01 14:26:50

标签: c# servicestack fluentvalidation

我刚刚开始熟悉ServiceStack并且已经开始使用FluentValidation。我已经按照介绍并创建了一个小型Hello应用程序。

我的问题是,当我尝试验证请求时,返回没有错误消息来描述验证失败的方法,只有空白的Json对象{}

我自己,我认为验证是自动连接到DTO所以我不需要编写任何额外的代码。

答案可能是明显的,但我看不出来。任何帮助将不胜感激。我的代码如下:

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。真的很享受使用ServiceStack,这真是一个非常棒的项目,谢谢。

修改

例如:

致电:http://localhost:60063/hello/Ian?format=json返回{"Result":"Hello, Ian"}。 而呼叫:http://localhost:60063/hello/I?format=json会返回{}

第二个调用返回{}我希望自动生成的错误消息。

1 个答案:

答案 0 :(得分:6)

我找到了答案。这是对我的忽视:

这是在文档中,我忽略了它:

  

处理下面描述的所有错误处理和验证选项   以同样的方式 - 序列化到你的ResponseStatus属性   响应DTO使您的客户端应用程序成为可能   通常以相同的方式处理所有Web服务错误。

因此,我的代码中缺少的是将以下行添加到HelloResponse类中。

  

public ResponseStatus ResponseStatus {get;组; }