Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何设置两个同名操作,一个已授权,一个未授权?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 如何设置两个同名操作,一个已授权,一个未授权?

Asp.net mvc 如何设置两个同名操作,一个已授权,一个未授权?,asp.net-mvc,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"; } 因此,如果用户未登录,则默

在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";
}

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

我不这么认为。将选择具有最佳参数匹配的控制器操作,然后应用属性

你可以用

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...
}

是的,这是可能的。您需要创建自己的
ControllerActionInvoker
并重写
FindActionMethod
成员。我会让基类完成它的工作,然后检查它返回的方法是否满足您的条件,如果不满足,则返回更好的匹配

我这样做是为了让我的控制器有一个“默认动作”,而且效果很好。查看MvcContrib及其ActionInvoker的实现,了解一个非常好的示例