I used default ASP.NET MVC4 Web Application Template and Visual Studio Create InitializeSimpleMembershipAttribute in Filters Directory and create account Controller like this:
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
/* Some Default Actions like Login, LogOff, Register, ...*/
}
and i try to make AccountController WebAPI, my code is:
[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";
}
}
now, when i call api, its break in this line:
if (WebSecurity.Login(UserName, Password, persistCookie: RememberMe))
and said: You must call the "WebSecurity.InitializeDatabaseConnection" method before you call any other method of the "WebSecurity" class.
i ran it in InitializeSimpleMembershipAttribute and webapi controller is same with controller.
why attribute not run in WebAPI?
The [InitializeSimpleMembership]
-attribute inherits from System.Web.Mvc.ActionFilterAttribute
Action filters for Web API need to inherit from System.Web.Http.Filters.ActionFilterAttribute
, so the filter is not actually getting executed on your Web API controller.
There's two things you can do:
System.Web.Http.Filters.ActionFilterAttribute
Add the following code to your 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);
}
For this to work you need to move the logic from InitializeMembership
into a separate class and make sure you can access it from the global.asax
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With