基本上我想要完成的是这样的事情:
[AllowAnonymous]
public ActionResult MyAction(string id)
{
if (Request.IsAuthenticated)
{
//do stuff
return View();
}
//if we come here, redirect to my custom action
return RedirectToAction("Action","Controller", new {@id=id});
}
但是,我试图找出是否可以使用自定义属性执行相同的操作,而不是这种方法,看起来像这样:
[Authorize(RedirectIfNotAuthorized="~/Controller/Action/id")]
public ActionResult MyAction(string id)
{
//do stuff
return View();
}
根据我的阅读,可以通过更改Asp.net Identity的配置将默认URL(“/ Account / Login”)更改为另一个URL。这不是我想要的。我希望在某些特定情况下重定向到另一个网址。
(背景故事是在某些情况下,当用户由于不活动而退出时,某些重定向网址不是必需的。让我们说用户即将从网址下载文件(“〜/ Files / Pdf / 123“)但是已经注销了。我不希望用户在重新登录时被重定向到此URL。
答案 0 :(得分:1)
您需要自定义属性:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace Attributes
{
public class AuthAttribute : ActionFilterAttribute
{
private readonly string _action;
private readonly string _controller;
private readonly string _role;
public AuthAttribute(string action, string controller, string role)
{
_action = action;
_controller = controller;
_role = role;
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (!filterContext.HttpContext.User.IsInRole(_role))
{
filterContext.Result = new RedirectToRouteResult(new {action = _action, controller = _controller});
}
else
{
base.OnResultExecuting(filterContext);
}
}
}
}
用法:
[Auth("Test", "Home", "Admin")]
public IActionResult Index()