为什么class属性不是在工作的WebAPI? [英] Why class attribute not work in WebAPI?
问题描述
我用默认的ASP.NET MVC4 Web应用程序模板和Visual Studio中创建的 InitializeSimpleMembershipAttribute 在过滤器目录,并创建帐户控制是这样的:
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, ...*/
}
和我尽量让的AccountController的WebAPI,我的code是:
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";
}
}
现在,当我打电话的API,它在这个换行符:
now, when i call api, its break in this line:
如果(WebSecurity.Login(用户名,密码,persistCookie:与rememberMe))
if (WebSecurity.Login(UserName, Password, persistCookie: RememberMe))
和说:您必须调用WebSecurity.InitializeDatabaseConnection的方法,你所说的WebSecurity类的任何其他方法之前
我跑它的 InitializeSimpleMembershipAttribute 并的WebAPI控制器一样的是控制器。
i ran it in InitializeSimpleMembershipAttribute and webapi controller is same with controller.
为什么不属性中的WebAPI跑?
why attribute not run in WebAPI?
推荐答案
的 [InitializeSimpleMembership]
-attribute从继承System.Web.Mvc。 ActionFilterAttribute
The [InitializeSimpleMembership]
-attribute inherits from System.Web.Mvc.ActionFilterAttribute
对Web API操作筛选需要从 System.Web.Http.Filters.ActionFilterAttribute
继承,所以过滤器实际上并没有得到你的Web API控制器上执行。
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.
有两件事情可以做:
- 要么实现自己的过滤器,从
System.Web.Http.Filters.ActionFilterAttribute
继承 -
添加以下code到你的
的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的访问
。
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
.
这篇关于为什么class属性不是在工作的WebAPI?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!