3

我正在使用 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 控制台(google chrome 扩展程序)来测试它,我会在发布到完全相同的URI 时得到以下结果:

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

一定有什么我错过了。

非常感谢您的宝贵时间,我将不胜感激。

再次感谢。

4

0 回答 0