从ServiceStackController继承时的ServiceStack重定向

时间:2013-05-06 13:57:30

标签: asp.net-mvc servicestack

根据此question,有一种方法可以更改ServiceStack身份验证服务的重定向URL。

然而,当从ServiceStackController<AuthUserService>继承我的控制器时,这显然不起作用,因为ServiceStackController对重定向URL进行了硬编码,并且在AuthFeature注册中更改它对它没有影响。

我的问题是:

1)解决这个问题的正确方法是什么?

有一个选项可以覆盖LoginRedirectUrl,这是吗? Authenticate属性的HtmlRedirect属性或AuthFeature的属性有什么意义?

2)ServiceStackController完全是什么目的?

3)我已将[Authenticate]放在我的基本控制器上,[Authenticate]属性似乎忽略了我在帐户控制器的[AllowAnonymous]操作上放置的Login属性

我知道这两个是完全分开的,[AllowAnonymous]来自System.Web,但ServiceStack中是否有“allow”属性?

2 个答案:

答案 0 :(得分:2)

我假设您正在使用ServcieStack和ASP.NET MVC应用程序......

1)解决此问题的正确方法是什么?

在我继承自ServiceStackController的MVC Controller中,我添加了它来处理重定向。

public override ActionResult AuthenticationErrorResult
{
    get
    {
        if (this.AuthSession == null || this.AuthSession.IsAuthenticated == false)
        {
            return Redirect("~/Home/Login");
        }
        return base.AuthenticationErrorResult;
    }
}

Authenticate属性的HtmlRedirect属性或AuthFeature的属性是什么
我很确定HtmlRedirect在没有向MVC控制器发出请求时会按预期工作(即调用/ api / foo,假设ServiceStack的custompath为'/ api')。我认为MVC'劫持回报'存在一些问题。

2)ServiceStackController的目的是什么?
我的理解是它的主要目的是在ServiceStack和MVC之间share Session data

但ServiceStack中是否有“allow”属性?
不是我知道但是因为Authenticate is just a filter你可以创建它的子类并为'allow'添加某种类型的支持。

答案 1 :(得分:0)

不确定它是否是新的,但是看了一下代码,它实际上只是AuthFeature构造函数的可选第三个参数,所以你可以这样做:

//htmlRedirect is optional 3rd param of AuthFeature constructor, here passing "~/signin"
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
    new IAuthProvider[] { new CredentialsAuthProvider(), },
    "~/signin"));