使用ServiceSttack的间歇性验证问题

时间:2013-01-20 09:36:45

标签: servicestack

我正在使用ServiceStack构建API,同时,我正在使用允许Razor视图将html返回给浏览器的插件。

我已正确设置和配置验证。我知道这是因为我在相应的Razor视图上获得了验证消息,并且消息是准确的。但是,如果我修改Razor视图完全(并且“完全”我的意思就像添加换行符然后立即删除它一样简单),我得到500错误并伴随着空白页。

其他时候,在简单刷新页面以查看Razor视图样式的过程中,验证只会返回一个空白页面,其中包含相同的无用500错误。当然,如果我删除验证,Razor视图会在100%的时间内呈现正常。

我必须做什么才能让验证始终有效?我的代码很简单,并且匹配了我在文档中可以阅读的所有内容。也就是说,响应和请求都在同一名称空间中,验证器被编码为请求。

以下是请求DTO

namespace MyServer.DTO
{
    [Validator(typeof(SignUpValidator))]
    [Route("SignUp")]
    public class SignUp : IReturn<SignUpResponse>
    {
        public string UserName { get; set; }
        public string Email { get; set; }
        public string EmailConfirm { get; set; }
        public string Password { get; set; }
        public string PasswordConfirm { get; set; }
        public int UserId { get; set; }
    }
}

以下是相应的验证工具

namespace MyServer.DTO
{
    public class SignUpValidator : AbstractValidator<SignUp>
    {
        public SignUpValidator()
        {
            RuleSet(ApplyTo.Post, () =>
                {
                    RuleFor(e => e.UserName).NotEmpty();
                    RuleFor(e => e.Email).NotEmpty();
                    RuleFor(e => e.EmailConfirm).NotEmpty();
                    RuleFor(e => e.Password).NotEmpty();
                    RuleFor(e => e.PasswordConfirm).NotEmpty();
                }
            );
        }
    }
}

以下是回复

namespace MyServer.DTO
{
    public class SignUpResponse
    {
        bool DidSucceed { get; set; }
        int NewUserId { get; set; }
        public ResponseStatus ResponseStatus { get; set; }
    }
}

最后,这是配置验证插件的代码

        Plugins.Add(new ValidationFeature());
        Container.RegisterValidators(typeof(SignUpService).Assembly);

正如你所看到的,一切都非常香草和书,但这种设置由于某种原因非常脆弱。对相应的Razor视图的任何修改,我得到上述错误。然后我必须反复重新编译,直到它再次工作。

我还应该提一下,如果我使用REST控制台(谷歌浏览器扩展程序)来测试这个,我在发布到完全相同的 URI时会得到以下结果:

  • Content-Type设置为: application / json - 一切都按预期工作。 400响应正文中列出的错误的响应。
  • Content-Type设置为: application / html - 始终如一地中断。 500响应正文中没有数据的响应。

必须有一些我不知道的东西。

非常感谢您的时间,我将不胜感激任何帮助。

再次感谢。

0 个答案:

没有答案