我有一个模块,旨在让管理员管理用户。当然,该模块不仅需要认证,还需要特定的声明。我发现,如果您错过了相关的声明,实际上只会获得一个空白页作为对您的请求的回复。这不太理想。
我该如何改变?
下面的模块代码(如果有人需要查看)......
public class UserModule : NancyModule
{
public UserModule()
: base("/users")
{
this.RequiresAnyClaim(new[] { "evil-dictator" });
Get["/"] = _ =>
{
ViewBag.UserName = Context.CurrentUser.UserName;
return Negotiate.WithView("Index");
};
// Generate an invitation for a pre-approved user
Get["/invite"] = _ =>
{
throw new NotImplementedException();
};
}
}
答案 0 :(得分:0)
如果缺少索赔,您可以使用After
hook更改回复。请注意,当您没有所需声明时获得的响应具有HTTP状态代码403 Forbidden
。在After
挂钩中检查它并根据需要更改响应。
E.g。以下将重定向到应用程序的根 - "/"
- 当用户确实有邪恶的独裁者声明时:
public class UserModule : NancyModule
{
public UserModule()
: base("/users")
{
After += context =>
{
if (ctx.Response.StatusCode == HttpStatusCode.Forbidden)
ctx.Response = this.Response.AsRedirect("/");
}
this.RequiresAnyClaim(new[] { "evil-dictator" });
Get["/"] = _ =>
{
ViewBag.UserName = Context.CurrentUser.UserName;
return Negotiate.WithView("Index");
};
// Generate an invitation for a pre-approved user
Get["/invite"] = _ =>
{
throw new NotImplementedException();
};
}
}