1

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

[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 模型导致 NullReferenceException。难道我做错了什么?

谢谢!

4

1 回答 1

1

我不确定你的实现是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") },
    }
});

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

SetConfig(new EndpointHostConfig {
    GlobalHtmlErrorHttpHandler = new RazorHandler("/error")
});
于 2013-01-09T02:03:32.330 回答