Asp.net mvc 如何设置两个同名操作,一个已授权,一个未授权?
在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"; } 因此,如果用户未登录,则默
[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的实现,了解一个非常好的示例