如何设置2个具有相同名称的操作,1个已授权,1个未授权?

时间:2008-11-30 23:09:59

标签: asp.net-mvc

是否有可能在ASP.NET MVC中有这样的东西......

[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public string AddData(string Issues, string LabelGUID)
{
    return "Authorized";
}

[AcceptVerbs(HttpVerbs.Get)]
public string AddData()
{
    return "Not Authorized";
}

因此,如果用户未登录,则默认为未授权操作。

2 个答案:

答案 0 :(得分:3)

是的,它可能。您需要创建自己的ControllerActionInvoker并覆盖FindActionMethod成员。我让基类做它的工作然后检查它返回的方法是否满足你的标准,如果没有,返回更好的匹配。

我正在做这样的事情,让我的控制器有一个“默认动作”,它运作良好。查看MvcContrib及其ActionInvoker的实现,这是一个非常好的例子。

答案 1 :(得分:1)

我不相信。将选择具有最佳参数匹配的控制器动作,然后应用属性。

您可以使用

if (Request.IsAuthenticated)
{  
    return "Authorized";
}
else
{  
    return "Not Authorized";
}

引擎盖[授权]基本上做同样的事情

protected virtual bool AuthorizeCore(IPrincipal user)
{
    if (user == null)
    {
        throw new ArgumentNullException("user");
    }

    if (!user.Identity.IsAuthenticated)
    {
        return false;
    }

    ...snip...
}