gpt4 book ai didi

asp.net-mvc - 为什么类属性在 Web API 中不起作用?

转载 作者:行者123 更新时间:2023-12-04 17:18:15 29 4
gpt4 key购买 nike

我使用默认的 ASP.NET MVC4 Web 应用程序模板和 Visual Studio 创建 InitializeSimpleMembershipAttribute 在过滤器目录中并像这样创建帐户 Controller :

[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 时,它在这一行中断:

如果(WebSecurity.Login(用户名,密码,persistCookie:RememberMe))

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

我在 中运行它InitializeSimpleMembershipAttribute 和 webapi Controller 与 Controller 相同。

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

最佳答案

[InitializeSimpleMembership] - 属性继承自 System.Web.Mvc.ActionFilterAttribute
Web API 的操作过滤器需要继承自 System.Web.Http.Filters.ActionFilterAttribute ,因此过滤器实际上并未在您的 Web API Controller 上执行。

你可以做两件事:

  • 要么实现你自己的过滤器,继承自 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 访问它.

    关于asp.net-mvc - 为什么类属性在 Web API 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512753/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com