ServiceStack剃刀 - 从具有默认视图的服务重定向会导致异常

时间:2013-01-08 17:14:47

标签: c# servicestack

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

[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");
         }
    }
}

我遇到的问题是,当auth检查失败并且服务返回重定向响应时,似乎剃刀页面仍在执行,但是使用null模型导致NullReferenceException。我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

或者,如果您只需要1个页面,则可以指定未处理错误的后备:

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