加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么class属性在WebAPI中不起作用?

发布时间:2020-12-16 03:28:42 所属栏目:asp.Net 来源:网络整理
导读:我使用默认的ASP.NET MVC4 Web应用程序模板和Visual Studio在Filters目录中创建InitializeSimpleMembershipAttribute并创建帐户控制器,如下所示: [Authorize][InitializeSimpleMembership]public class AccountController : Controller{/* Some Default Act
我使用默认的ASP.NET MVC4 Web应用程序模板和Visual Studio在Filters目录中创建InitializeSimpleMembershipAttribute并创建帐户控制器,如下所示:

[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
/* Some Default Actions like Login,LogOff,Register,...*/
}

我尝试创建AccountController WebAPI,我的代码是:

[Authorize]
[InitializeSimpleMembership]
public class APIAccountController : ApiController
{
    [System.Web.Http.AcceptVerbs("GET","POST")]
    [System.Web.Http.HttpGet]
    [System.Web.Http.HttpPost]
    [System.Web.Http.AllowAnonymous]
    [System.Web.Mvc.ValidateAntiForgeryToken]
    public string Login(string UserName,string Password,bool RememberMe)
    {
        if (WebSecurity.Login(UserName,Password,persistCookie: RememberMe))
        {
            return "OK";
        }

        return "Failed";
    }
}

现在,当我打电话给api时,它在这一行中断:

if(WebSecurity.Login(UserName,persistCookie:RememberMe))

并说:在调用“WebSecurity”类的任何其他方法之前,必须调用“WebSecurity.InitializeDatabaseConnection”方法.

我在InitializeSimpleMembershipAttribute中运行它,webapi控制器与控制器相同.

为什么属性不能在WebAPI中运行?

解决方法

[InitializeSimpleMembership] – 属性继承自System.Web.Mvc.ActionFilterAttribute

Web API的操作筛选器需要从System.Web.Http.Filters.ActionFilterAttribute继承,因此实际上不会在Web API控制器上执行筛选器.

你可以做两件事:

>从System.Web.Http.Filters.ActionFilterAttribute继承实现自己的过滤器
>将以下代码添加到global.asax

private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;

protected void Application_Start()
{
    // Ensure ASP.NET Simple Membership is initialized only once per app start 
LazyInitializer.EnsureInitialized(ref _initializer,ref _isInitialized,ref _initializerLock); 
}

为此,您需要将逻辑从InitializeMembership移动到单独的类中,并确保您可以从global.asax访问它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读