2013-05-12 8 views
5

मैं डिफ़ॉल्ट ASP.NET MVC4 वेब अनुप्रयोग खाका और विजुअल स्टूडियो का इस्तेमाल किया में फिल्टर निर्देशिका InitializeSimpleMembershipAttribute बनाएँ और इस तरह खाते नियंत्रक बनाने के लिए:वेबएपीआई में वर्ग विशेषता क्यों काम नहीं करती है?

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

और मैं AccountController वेबएपीआई बनाने की कोशिश, मेरे कोड है:

[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"; 
    } 
} 
अब

, जब मैं एपीआई, इस पंक्ति में अपने को तोड़ने फोन:

अगर (WebSecurity.Login (नाम, पासवर्ड, प्रति sistCookie: RememberMe))

और कहा: आपको "वेब सुरक्षा" श्रेणी की किसी अन्य विधि को कॉल करने से पहले आपको "WebSecurity.InitializeDatabaseConnection" विधि को कॉल करना होगा।

मैंने इसे में शुरू किया आरंभिकसमूहरशिप एट्रिब्यूट और वेबपी नियंत्रक नियंत्रक के साथ समान है।

क्यों वेबएपीआई में विशेषता नहीं चलती है? वेब एपीआई के लिए System.Web.Mvc.ActionFilterAttribute

कार्रवाई फिल्टर से

उत्तर

4

[InitializeSimpleMembership] -attribute inherits System.Web.Http.Filters.ActionFilterAttribute से विरासत की जरूरत है, तो फिल्टर वास्तव में अपने वेब एपीआई नियंत्रक पर निष्पादित नहीं हो रही है।

दो चीजें है कि आप कर सकते हैं:

  • या तो अपने स्वयं के फिल्टर लागू, 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 से एक्सेस कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे