我添加了一些剃刀视图并使用请求过滤器来检查浏览器版本并在桌面和移动视图之间切换。但是当异常发生时,尤其是验证异常,似乎框架立即返回并且从未触及任何自定义代码。我尝试了请求/响应过滤器、服务异常处理程序,但没有一个被执行。它似乎也忽略了 URL 查询字符串中指定的视图/模板。
有没有办法在异常期间设置视图/模板?谢谢
我添加了一些剃刀视图并使用请求过滤器来检查浏览器版本并在桌面和移动视图之间切换。但是当异常发生时,尤其是验证异常,似乎框架立即返回并且从未触及任何自定义代码。我尝试了请求/响应过滤器、服务异常处理程序,但没有一个被执行。它似乎也忽略了 URL 查询字符串中指定的视图/模板。
有没有办法在异常期间设置视图/模板?谢谢
第一个问题是您如何处理验证异常?
执行此类任务的最常见过程是使用 fluentValidation,响应可以同时返回一条消息进行多个验证,所有验证都针对 DTO,您需要实现 AbstractValidator,第一件事您需要做的是注册属于您的应用程序的验证器,如下所示:
Plugins.Add(new ValidationFeature());
container.RegisterValidators(typeof(CredentialsAuthValidator).Assembly);
在这种情况下,我正在验证 Auth 用户名和密码不应为空,请查看以下示例:
public class CredentialsAuthValidator : AbstractValidator<ServiceStack.ServiceInterface.Auth.Auth>
{
public CredentialsAuthValidator()
{
RuleSet(ApplyTo.Post, () =>
{
RuleFor(x => x.UserName).NotNull().WithMessage("Username Required").When(x => x.provider == "Credentials");
RuleFor(x => x.Password).NotNull().WithMessage("Password Required").When(x => x.provider == "Credentials");
}
);
}
}
如果某些验证失败,您将从服务器收到带有 errorCode 和消息的 responseStatus。
您可以配置自定义 httpHandlers,以防您希望为特定场景提供处理程序或全局错误处理程序,这可以在您的 serviceHost 配置中执行,如下所示:
GlobalHtmlErrorHttpHandler = new RazorHandler("/views/error"),
CustomHttpHandlers =
{
{HttpStatusCode.NotFound, new RazorHandler("/views/notfound")},
{HttpStatusCode.Unauthorized, new RazorHandler("/views/login")},
{HttpStatusCode.Forbidden, new RazorHandler("/views/forbidden")},
}
感谢 Pedro 的帮助,尤其是来自 ServiceStack 的 mythz。现在我想我开始明白我的问题了。
ServiceStack 首先是一个服务框架,而 Razor 只是对相同结果的另一种看法。但是我对完整的客户端解决方案有点犹豫,并不断回到熟悉的领域并寻找某种代码隐藏功能。这似乎是我许多挣扎的根源。
经过一些更多的研究,这是我到目前为止提出的。
到目前为止看起来很有希望。页面的大小要小得多,运行超级流畅,而且大部分是纯 json 在网络上飞来飞去。
仍在进行中,欢迎所有建议。
当我改为使用请求过滤器时,ViewSwitch 工作。得到了正确的布局和所有的引用等。虽然他们必须共享相同的错误页面,但那里没有太多的格式。