Vor einiger Zeit hatte ich ein Problem mit dem Uploadify Plugin, für das ich eine Lösung gefunden habe, die in dieser answer beschrieben ist.Uploadify Problem mit Authentication Token und Html.AntiforgeryToken (Plugin sendet keine Cookies)
Das Problem in dieser Frage war im Wesentlichen aufgrund der Tatsache, dass Uploadify ein Flash-Plugin verwendet und das Flash-Plugin das Authentifizierungs-Cookie nicht mit dem serverseitigen Code teilt.
Die Lösung bestand darin, eine benutzerdefinierte Version des Autorize-Attributs zu verwenden (der Code wurde in dieser Antwort veröffentlicht).
Das Attribut [TokenizedAuthorize] auf der Controller-Klasse platziert wurde als
[TokenizedAuthorize]
[CheckForActiveService]
public partial class DocumentController : BaseController
{
}
Vor einigen Tagen folgt Ich habe die <%: Html.AntiForgeryToken() %>
in der Form und die [ValidateAntiForgeryToken]
auf die Aktion-Methode, wie in dem folgende Beispiel hinzugefügt:
[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult Upload(HttpPostedFileBase fileData) {
}
Trotzdem kann ich keine Dateien mehr auf den Server hochladen. Mit Hilfe des Debuggers ich in der Lage gewesen
imTokenizedAuthorize
Code, der nach der letzten Zeile zu überprüfen
return base.AuthorizeCore(httpContext);
Ich erhalte eine von Elmah behandelte Ausnahme, die
System.Web.Mvc.HttpAntiForgeryException: invalid or not specified anti forgery token
in System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)
in System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor)
in System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
Diese Ausnahme, dass das [ValidateAntiForgeryToken]
Attribut scheint zu bestätigen, sagt wird aufgerufen ... aber ich kann nicht verstehen, wo das Problem mit meinem Code ist.
Irgendwelche Hilfe?
EDIT:
Mit dem Debugger Ich habe den Wert des Parameters __RequestVerificationToken
Form geprüft und, wie Sie sehen können, ist es richtig mit dem Wert von <%: Html.AntiForgeryToken() %>
EDIT 2:
Ich kann auch bestätigen, dass, wenn ich co mment die [ValidateAntiForgeryToken]
auf der Beitrag Aktion alles
EDIT 3 erwartet funktioniert:
Da die Post-Funktion ist ein Ajax-Aufruf durch die Uploadify wird auf die Post-Parameter mit einem kleinen js hinzugefügt Plugin die AntiForgeryToken getan Funktion wie im folgenden Code
$('#fileInput').uploadify({
//other uploadify parameters removed for brevity
scriptData: AddAntiForgeryToken({ AuthenticationToken: auth }),
});
wo AddAntiForgeryToken()
eine Javascript-Funktion in meiner Masterseite definiert ist, all ajax-Post an den Server zu unterstützen
<%-- used for ajax in AddAntiForgeryToken() --%>
<form id="__AjaxAntiForgeryForm" action="#" method="post">
<%: Html.AntiForgeryToken() %>
</form>
// Encapsulate the Anti Forgery Token fetching
AddAntiForgeryToken = function (data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
EDIT 4:
Darin Intuition richtig ist. Das Skript "Uploadify" sendet keine Cookies an den Server, sodass der Server das AntiForgeryToken nicht validieren kann. Wie kann ich das Cookie im Bereich "Uploadify scriptData" hinzufügen?
Eigentlich ist 'System.Web.Mvc.HttpAntiForgeryException' mit der Beschreibung (versuchen, es genau aus Italienisch zu übersetzen)" AntiForgenery Token nicht angegeben oder ungültig. " – Lorenzo
Es ist angegeben, so dass es ungültig ist. Ich würde versuchen, das '<% =' Tag anstelle von '<%:' zu verwenden, aber das ist nur eine Idee ... – Fabian
Eigentlich verwende ich '<%: Html.AntiForgeryToken()%>' nicht, um die Fälschung zu veröffentlichen Zeichen. Der Post wird durch Ajax erledigt, also füge ich einfach das Fälschungstoken in das uploadify-Skript ein. Ich werde die Frage erneut bearbeiten, um Ihnen zu zeigen, wie ... – Lorenzo