2013-04-01 20 views
38

Hiện tại bất cứ khi nào tôi cố gắng đăng ký người dùng hoặc đăng nhập bằng dịch vụ thành viên mặc định được tích hợp vào ASP.Net MVC4 trên nhà cung cấp máy chủ của tôi DiscountASP I nhận được lỗiĐể gọi phương thức này, thuộc tính "Membership.Provider" phải là phiên bản của "ExtendedMembershipProvider"

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

Điều này không xảy ra tại địa phương.

Đây là tôi InitializeSimpleMembershipAttribute.cs:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute 
{ 
    private static SimpleMembershipInitializer _initializer; 
    private static object _initializerLock = new object(); 
    private static bool _isInitialized; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Ensure ASP.NET Simple Membership is initialized only once per app start 
     LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); 
    } 

    private abstract class SimpleMembershipInitializer 
    { 
     protected SimpleMembershipInitializer() 
     { 
      Database.SetInitializer<UsersContext>(null); 

      try 
      { 
       using (var context = new UsersContext()) 
       { 
        if (!context.Database.Exists()) 
        { 
         // Create the SimpleMembership database without Entity Framework migration schema 
         ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); 
        } 
       } 

       WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
      } 
      catch (Exception ex) 
      { 
       throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); 
      } 
     } 
    } 
} 

Đây là một ảnh chụp màn hình đầy đủ của lỗi:

Có ai biết làm thế nào tôi có thể sửa lỗi này hoặc biết một bài viết mà giải quyết nó?

+1

Bạn có thể hiển thị '' phần web.config? Có vẻ như bạn đang cố gắng sử dụng SimpleMembership nhưng nhà cung cấp không phù hợp. Ngoài ra, hãy chắc chắn 'WebMatrix. *' Được đặt thành 'Sao chép địa phương = True' trong thuộc tính 'tham chiếu'. –

+0

Tôi thực sự không có một phần thành viên được xác định trong Web.config của tôi vì một lý do nào đó. Bạn có thể cho tôi biết nó sẽ trông như thế nào không? –

Trả lời

63

Hãy thử đặt lên sau trong web.config của bạn trong vòng nút <system.web>:

<roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
     <providers> 
      <clear /> 
      <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" /> 
     </providers> 
    </roleManager> 
    <membership defaultProvider="SimpleMembershipProvider"> 
     <providers> 
      <clear /> 
      <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> 
     </providers> 
    </membership> 
    <sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
     <providers> 
      <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 
     </providers> 
    </sessionState> 

Âm thanh như SimpleMembership không được công nhận khi bạn đi đến sử dụng nó.

Ngoài ra, nó có thể có giá trị bao gồm các thư viện WebMatrix.webData thể được cài đặt thông qua NuGet:

PM> Install-Package Microsoft.AspNet.WebPages.WebData 
+0

Cảm ơn điều này đã làm việc tuyệt vời! –

+0

Rất vui được trợ giúp! ;-) –

+0

Trong dòng thứ tư của mã của bạn, tôi đã có Lỗi máy chủ: "Không thể tải tệp hoặc lắp ráp 'WebMatrix.WebData' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định." Nguyên nhân có thể là gì? – pt12lol

1

tôi đã có lỗi tương tự, nhưng nó đã được 100% tài liệu tham khảo cho tôi. Tôi đã gặp rắc rối khi WebMatrix.WebSecurity hoạt động nhiều lần ... mỗi lần là vì tôi không tạo dự án bằng mẫu Internet MVC 4.

Điều quan trọng là tham chiếu và cấu hình hoạt động theo mặc định trong mẫu, vì vậy, chỉ cần tạo lại dự án của bạn và nó sẽ ổn.

Khắc phục của tôi là: 1. Sao lưu dự án của tôi vào thư mục khác. 2. Kiểm tra tất cả các tệp 3. Tạo một dự án Internet MVC 4 mới, dưới cùng một tên chính xác. 4. Sao chép + Dán (ghi đè lên) dự án gốc. 5. Thêm bất kỳ tham chiếu bị thiếu, thay đổi tuyến đường, cài đặt .config/kết nối DB.

+0

Ý của bạn là 'mẫu internet' là gì? Mẫu dự án mvc 4 trong studio trực quan theo mặc định sẽ không hoạt động? –

+0

Ồ, tôi nghĩ bạn muốn chọn mẫu dự án ASP.NET MVC 4 cục bộ, sau đó trên màn hình tiếp theo chọn 'Ứng dụng Internet'. Tôi có đúng không? Tôi chỉ muốn được rõ ràng vì suy nghĩ ban đầu của tôi là bạn tìm thấy một mẫu dự án trực tuyến cho mvc và cài đặt đó. –

3

Đã thực hiện các bước trên nhưng điều đó không có tác dụng. Có gì giúp được thay đổi web.config:

 <dependentAssembly> 
    <assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
      <dependentAssembly> 
    <assemblyIdentity name="WebMatrix.WebData" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
6

Cố gắng thay đổi chức năng Login dưới AccountController.cs

 // 
    // POST: /Account/Login 

    [AllowAnonymous] 
    [HttpPost] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (Membership.ValidateUser(model.UserName, model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
       if (Url.IsLocalUrl(returnUrl)) 
       { 
        return Redirect(returnUrl); 
       } 
       else 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 
+0

cảm ơn bro, công trình của nó – yozawiratama

+0

Chính xác! Đây là một giải pháp tuyệt vời cho bất kỳ ai di chuyển từ trang aspx sang MVC! – TomO

Các vấn đề liên quan