如何在NancyFX中定义对缺失声明的响应?

时间:2014-03-28 16:47:20

标签: authentication claims nancy

我有一个模块,旨在让管理员管理用户。当然,该模块不仅需要认证,还需要特定的声明。我发现,如果您错过了相关的声明,实际上只会获得一个空白页作为对您的请求的回复。这不太理想。

我该如何改变?

下面的模块代码(如果有人需要查看)......

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();
        };
    }
}

1 个答案:

答案 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();
       };
    }
}