任何人都可以推荐如何整理我的代码段/使其更有用。 这是发生了什么:如何抽象我的授权码/收拾我的控制器
如果控制器具有[Authorize]
第一行代码的那个函数内读取
var user = GetUser(_userService);
if (user == null)
return RedirectToAction("Logout", "User");
这让我不仅要检查,如果身份验证cookie是存在的,但你也检查用户仍然在数据库中。
我的get用户函数非常简单,获取cookie,解密它,然后使用服务层返回用户此函数在类中声明,我的所有控制器都继承自该类。
public User GetUser(IUserService service)
{
var name = HttpContext.User.Identity.Name;
var faDecrypt = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
if (faDecrypt == null)
return null;
var userString = faDecrypt.Name;
if (String.IsNullOrEmpty(userString))
return null;
return service.Find(userString);
}
我所有的控制器parameteres使用Ninject注入,看起来像下面:
public UserController(IUserService service, IUnitOfWork unitOfWork)
{
_service = service;
_unitOfWork = unitOfWork;
}
我现在面临的问题是我想搬到了这一点,在某个地方,它说:
“授权标签已到位,运行获取用户以确保用户是真实的,如果真的继续下去,如果不是重定向“
我还需要这个功能才能够在Ninj内注入因为每个服务都有一个HTTP请求生存期。
---更新---
实施CustomAttribute后如下图所示:
public class EnhanchedAuthorize : ActionFilterAttribute
{
private readonly IUserService _service;
public EnhanchedAuthorize(IUserService service)
{
_service = service;
}
}
当使用这样的:
[HttpPost]
[EnhanchedAuthorize]
public ActionResult Edit(VenueCreateEditViewModel model)
我得到以下错误
“构造EnhanchedAuthorize有1个参数(S),但被调用, 0参数(S)”
为什么Ninject不处理呢?
在基地控制器里做授权操作:http://stackoverflow.com/a/21981920/1534785 –
你能看到我的更新吗? – LmC
您的EnhanchedAuthorize构造函数需要一个参数。创建一个无参数的构造函数。 –