ASP.NET MVC Forms身份验证和未经身份验证的控制器操作

Mik*_*ghe 12 authentication asp.net-mvc paypal

我有一个使用Forms身份验证锁定的ASP.NET MVC站点.web.config有

<authentication mode="Forms">
    <forms defaultUrl="~/Account/LogOn" loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>
Run Code Online (Sandbox Code Playgroud)

除非用户通过身份验证,否则无法查看除帐户/登录以外的任何页面.

现在我正在尝试将PayPal IPN添加到我的网站,为了做到这一点,我需要有两个页面来处理PayPal的付款确认并感谢您的页面.这两个页面必须可供匿名用户使用.

我想这些页面是我的帐户控制器的控制器操作.有什么方法可以将属性应用于使匿名用户可以使用的特定操作方法吗?我在这里发现了几个尝试这样做的帖子,但大多数人都想要相反的情况.

基本上我希望AccountController除了少数方法之外,大多数方法都没有授权.现在,看起来只有LogOn方法可供匿名用户使用.

Mic*_*kel 13

是的你可以.在你的AccountController中,有一个[Authorize]属性在类级别(限制整个控制器)或特定方法.

要限制特定操作,只需对处理这些操作的方法使用Authorize属性,并使控制器类不受限制.

以下是一些例子......希望它有所帮助

要求用户登录,请使用:

[Authorize]
public class SomeController : Controller

// Or
[Authorize]
public ActionResult SomeAction()
Run Code Online (Sandbox Code Playgroud)

要限制特定角色的访问权限,请使用:

[Authorize(Roles = "Admin, User")]
public class SomeController : Controller

// Or
[Authorize(Roles = "Admin, User")]
public ActionResult SomeAction()
Run Code Online (Sandbox Code Playgroud)

要限制特定用户的访问权限,请使用:

[Authorize(Users = "Charles, Linus")]
public class SomeController : Controller

// Or
[Authorize(Users = "Charles, Linus")]
public ActionResult SomeAction()
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以在类级别或方法级别使用该属性.你的选择!