ServiceStack razor——从带有默认视图的服务重定向会导致异常

本文关键字:重定向 服务 异常 视图 razor 默认 ServiceStack | 更新日期: 2023-09-27 17:51:04

我正在尝试项目级安全性。我有如下服务:

[DefaultView("Customer")]
public class CustomerService : MyServiceBase
{
    public object Get(CustomerRequest request)
    {
         if (UserIsAuthorizedForCustomer(request.Id))
         {
             return new CustomerResponse { Customer = GetCustomer(request.Id) };
         }
         else
         {
             return this.Redirect("/AccessDenied.htm");
         }
    }
}

我遇到的问题是,当认证检查失败并且服务返回重定向响应时,看起来剃刀页面仍在执行,但是null Model导致NullReferenceException。我做错了什么吗?

谢谢!

ServiceStack razor——从带有默认视图的服务重定向会导致异常

我不确定您的Redirect的实现是什么,但重定向到错误页面的正常方法是抛出一个异常,该异常遵循AppHost中的重定向规则设置。例句:

if (!UserIsAuthorizedForCustomer(request.Id))
    throw new UnauthorizedException("Not Authorized");

在AppHost中,您可以为不同的错误代码指定不同的重定向页面,例如:

SetConfig(new EndpointHostConfig {
    CustomHttpHandlers = {
        { HttpStatusCode.NotFound, new RazorHandler("/notfound") },
        { HttpStatusCode.Unauthorized, new RazorHandler("/login") },
    }
});

或者如果你只想要一个页面,你可以为未处理的错误指定一个回退:

SetConfig(new EndpointHostConfig {
    GlobalHtmlErrorHttpHandler = new RazorHandler("/error")
});