我正在尝试项目级别的安全性。我有以下服务:
[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。我做错了吗?
谢谢!
答案 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")
});