我是ASP.NET的新手,我正在尝试设置一个访问控制,目前仅限于Request["key"]
参数的存在和值。 (在某些时候,这将更改为更高级的身份验证。)我不知道有什么机制可以将某种访问控制共用到我的控制器中的某些操作。现在,我正在创建许多重复的代码,如下所示:
public ActionResult DoSomething()
{
if (!IsValidKey(Request["key"]))
{
return Redirect("/login");
}
else
{
return View();
}
}
public ActionResult DoSomethingTotallyDifferent()
{
if (!IsValidKey(Request["key"]))
{
return Redirect("/login");
}
else
{
return View();
}
}
// and so on
是否有某种装饰器,一些覆盖方法,一些配置,我可以将这种行为共同起来并让某些操作只需设置ViewData
并返回View()
?
更新:我已经更新了我的代码,以便在未经授权的情况下重定向到我的登录页面(用[AllowAnonymous]
修饰)(通过添加HomeController
{{1}装饰者)。我已在调试器中确认我的身份验证成功,现在我发送的cookie为:
[Authorize]
使用Fiddler,我可以看到我的cookie已被发送。我更新了FormsAuthentication.SetAuthCookie("myUser", false);
文件以使用表单身份验证:
Web.config
当我导航到<system.web>
<authentication mode="Forms">
<forms loginUrl="Home/Index"></forms>
</authentication>
时,我会立即重定向到我的登录页面。我看到我的cookie被发送回服务器,但我的动作没有被触发(这意味着由于我是未经授权/未经身份验证,auth系统阻止了请求。)
答案 0 :(得分:0)
我认为您可以使用的是自定义操作过滤器。 你可以在这里找到相关的详细信息 http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx
有几种类型的自定义操作过滤器,我将在您的情况下使用的过滤器 OnActionExecuting
在调用操作方法之前调用该操作过滤器。
然而,wizzardz有一个很棒的观点,并且最终会成为更好的选择。