2015-01-02 5 views
12

Für mein Schulprojekt, ich bin mit der Standard-Account-Controller Registerfunktion, die mit einem MVC-Projekt kommt:Registrierung wirft ‚Inheritance Sicherheitsregeln verletzt, während übergeordnetes Element‘

// POST: /Account/Register 
[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model){ 
    if (ModelState.IsValid){ 
     var user = new ApplicationUser(){UserName = model.UserName}; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     if (result.Succeeded){ 
      await SignInAsync(user, isPersistent: false); 
      return RedirectToAction("Index", "Home"); 
     } 
     else{ 
      AddErrors(result); 
     } 
    } 

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

Aber wenn ich auf die Schaltfläche Register klicken In meinem Formular erhalte ich: Security accessibility of the overriding method must match the security accessibility of the method being overriden

Ich habe ein wenig gesucht, und festgestellt, dass das Hinzufügen [SecurityCritical] sollte es beheben, aber Sie können das nicht zu einer asynchronen Aufgabe hinzufügen.

fand auch, dass [assembly: SecurityRules(SecurityRuleSet.Level1)] Zugabe sollte es tun, aber das ist auch nicht funktioniert

Dies ist nur auf meinen veröffentlichen Server (Version 4.0 mit integrierten Pipeline laufen)

Stacktrace:

[TypeLoadException: Inheritance security rules violated while overriding member: 'Microsoft.AspNet.Identity.TaskExtensions+CultureAwaiter`1<T>.UnsafeOnCompleted(System.Action)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.] 
    Microsoft.AspNet.Identity.UserManager`2.CreateAsync(TUser user, String password) +0 
    Admin.Controllers.<Register>d__8.MoveNext() +198 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +84 
    System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +17 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9657896 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 
+1

Was ist der Stacktrace der Ausnahme, die Sie bekommen? klingt wie Ihre Klassenvererbung irgendwo hat 'private', wo es' public' sein sollte – trailmax

+0

@trailmax StackTrace hinzugefügt – Kiwi

+0

Haben Sie versucht, ein neues Projekt zu erstellen, das eine andere Framework-Version testet? Wenn Sie die 'UserManager.CreateAsync'-Methode nicht geändert haben, sehe ich nicht, warum dies passiert, außer Ihr Vertrauensebenen ist irgendwie anders oder ein Fehler im Framework. – Justin

Antwort

0

Assemblies werden nur dann als voll vertrauenswürdig eingestuft, wenn sie unter registriert sind. Wenn Ihre Baugruppe eine private Baugruppe ist, ist sie teilweise vertrauenswürdig und transparent (example of transparent behavior). Da Ihre Baugruppe eine private Baugruppe ist, würde Dot Net CLR ignorieren [SecurityCritical].

Wenn Sie also weiterhin die private Assembly behalten und sie in mittlerer Vertrauenswürdigkeit ausführen möchten, können Sie kein [SecurityCritical] Member überschreiben oder darauf zugreifen.

How to install an assembly into the Global Assembly Cache in Visual C#

+0

Ihnen nicht vollständig folgen. Könntest du ein bisschen mehr erklären? insbesondere warum die Lagerbestände nicht für GAC eingestellt werden. oder ist das nur etwas, was nicht standardmäßig gemacht wird? – Kiwi

+0

@Kiwi Ich legte den Grund der aufgetretenen Fehler und meine Lösungen sind: 1- Ändern der verwendeten Assembly Trust Level oder 2-In Anbetracht ihrer Verletzung für mittlere Vertrauen (zum Überschreiben) :) –

Verwandte Themen