我正在使用 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 响应正文中没有数据的响应。
一定有什么我错过了。
非常感谢您的宝贵时间,我将不胜感激。
再次感谢。