2010-12-03 8 views
2

Ich versuche, die Html.AntiForgeryToken in ASP.NET MVC unter Mono (XSP) zu verwenden, und es funktioniert nicht. Es löst die folgende Ausnahme aus. Irgendwelche Ideen?ASP.NET MVC: funktioniert AntiForgeryToken in Mono?

System.ArgumentNullException: Argument cannot be null. 
Parameter name: inputString 
    at System.Web.UI.ObjectStateFormatter.Deserialize (System.String inputString) [0x00006] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/ObjectStateFormatter.cs:131 
    at System.Web.UI.HiddenFieldPageStatePersister.Load() [0x00007] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/HiddenFieldPageStatePersister.cs:57 
    at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() [0x0000f] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/Page.cs:1763 
    at System.Web.UI.Page.LoadPageViewState() [0x00000] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/Page.cs:1769 
    at System.Web.UI.Page.RestorePageState() [0x00051] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/Page.cs:1454 
    at System.Web.UI.Page.InternalProcessRequest() [0x001b9] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/Page.cs:1433 
    at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context) [0x0005b] in /home/danipen/Downloads/mono-2.8/mcs/class/System.Web/System.Web.UI/Page.cs:1261 

Kennen Sie eine andere Möglichkeit, dies zu implementieren?

Danke in fortgeschrittenem.

Bearbeiten: Dies ist mein Ansichtscode (es ist eine Teilansicht). Wenn ich die Zeile <%= Html.AntiForgeryToken() %> lösche, funktioniert alles einwandfrei, in anderen Fällen die oben beschriebene Ausnahme.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Codice.Web.Client.Comment>" %> 

<div class="comment" style="background-color: #009ACF"> 
<div class="comment-meta"> 
    <p class="comment-author"> 
    <span class="avatarimage"> 
    <%= Html.AvatarFor(Model.CommentInfo.Owner) %> 
    </span> 
    <strong class="comment-author"> 
    <%= Html.Encode(Model.GetAuthorString()) %> 
    </strong> 
    says: 
    </p> 
    <p class="comment-date"> 
    <%= Html.TimeAgo(Model.CommentInfo.LocalTimeStamp) %> 
    </p> 
</div> 

<div class="comment-body"> 
    <div class="formatted-content"> 
    <%= Html.Encode(Model.CommentInfo.Comment) %> 
    </div> 
    <div class="form-content"> 
    <% using(Html.BeginForm(
        "EditComment", 
        "Comments", 
        new 
        { 
     repository = Model.Repository, 
     commentId = Model.CommentInfo.Id 
     }, 
        FormMethod.Post, 
        null)) 
     { %> 
      <%= Html.AntiForgeryToken() %> 
     <%= Html.TextBox("newComment", Model.CommentInfo.Comment) %> 

     <div class="form-actions"> 
     <a class"edit-cancel minibutton" href="#"> 
      <span>Cancel</span> 
     </a> 
     <button class="minibutton" type="submit"> 
      <span>Update comment</span> 
     </button> 
     </div> 
     <% 
     } 
    %> 
    </div> 
</div> 
</div> 
+0

Haben Sie überprüft, der gleiche Code funktioniert unter MS .NET? –

+0

Ich verwende AntiForgeryToken in MVC Webapp gehostet auf Apache mit mod_mono und es funktioniert ohne Probleme. Können Sie Ihren View- und Controller-Code hinter sich lassen? – yojimbo87

+0

@Tomi: Sicher, ich aktualisiere den Beitrag, um den Ansichtscode einzufügen. Der Controller ist kein Problem, nur das Kompilieren der Ansicht zur Laufzeit schlägt fehl. –

Antwort

2

Sie haben [ValidateAntiForgeryToken] Attribut auf Sie Controller-Aktion eingestellt, die die Postverb dient?

Bearbeiten: Mögliche Lösung für dieses Problem ist wahrscheinlich die Verwendung der neuesten Mono aus Master-Zweig, weil dieses Problem auf älteren Versionen von Mono repliziert werden kann (zum Beispiel Tarball vom 22. April verursacht die gleiche Ausnahme).

Bearbeiten 2: Was wahrscheinlich wirklich benötigt wird, um dies zu erreichen, ist die Einrichtung der gültigen machineKey element in der Datei web.config. Schlüssel können zum Beispiel mit this Dienstprogramm erzeugt werden.

+0

@Tomi: Ja, das Problem ist in der Teilansicht. Wenn ich die 'Html.AntiForgeryToken()' aus der Ansicht entferne, funktioniert der Controller ordnungsgemäß und wirft eine Exception (Required antiforguery token wurde nicht gefunden ...). –

+0

Hmm, das sieht seltsam aus. Können Sie die generierte HTML-Quelle hinter sich lassen, um zu sehen, ob das Anti-Fälschungs-Token im versteckten Feld unter Ihrem Formular vorhanden ist? – yojimbo87

+0

@Tommy: Irgendeine Idee? Welche Version von Mono versuchst du? –