我正在使用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时会得到以下结果:
必须有一些我不知道的东西。
非常感谢您的时间,我将不胜感激任何帮助。
再次感谢。