Ich habe eine Website, die einige Formulare, die ASP.NET MVC Ajax verwenden. Ein Beispiel für BeginForm
Methode:ASP.NET MVC Ajax Formular eingereicht Cross-Domain nicht senden Cookies
@using (Ajax.BeginForm("HandleSignin", "Profile", null, new AjaxOptions() {
HttpMethod = "POST",
Url = Url.Action("HandleSignin", "Profile", null, Request.Url.Scheme),
OnBegin = "SetWithCredentialsTrue(xhr)",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "signin-form-container" },
new { id = "sign-in-form", @class = "text-left-desktop group" }))
{
@Html.AntiForgeryToken()
@Html.TextBoxFor(x => Model.Email, new { placeholder = "Email" })
@Html.PasswordFor(x => Model.Password, new { placeholder = "Password" })
<input type="submit" value="SignIn" class="button small-button">
}
Beachten Sie, dass aufgrund des Request.Url.Scheme
param in der der Url.Action Methode wird die URL als die Domäne zu einer anderen Domäne festgelegt wird, dass der Browser diese aus erhält. Dies geschieht, weil die Hauptseite statisch mithilfe eines CDN gehostet wird, während das Formular mithilfe von AJAX aus einer anderen Domäne geladen wird. Dies funktioniert, außer dass die Cookies nicht in der AJAX-Anfrage gesendet werden. Ich habe versucht, die Cookies von xhr.withCredentials = true
Einstellung unter Verwendung des OnBegin
Ereignis und dieses JavaScript gesendet haben:
<script type="text/javascript">
function SetWithCredentialsTrue(xhr) {
console.log("SetWithCredentialsTrue(xhr)", xhr);
xhr.withCredentials = true;
}
</script>
Während ich sehen kann, dass SetWithCredentialsTrue()
Methode, es scheint nicht zu arbeiten aufgerufen wird, dass die HTTP-Anforderung erzeugt wird, wenn die Formular ist gesendet hat nicht den Cookie-Header.
Alle der serverseitigen Handler Einstellen der Access-Control-Allow-Credentials
Antwortheader true
und die Access-Control-Allow-Origin
an die Haupt (statisch) Site-Domäne.
UPDATE: Mit etwas mehr Konsolenprotokollierung, habe ich festgestellt, dass die xhr
Parameter auf meine OnBegin Event-Handler übergeben (SetWithCredentialsTrue
) kein XMLHttpRequest Objekt und somit Einstellung withCredentials auf sie nicht beeinflussen muss. Die Frage ist also, wie kann ich auf das XMLHttpRequest-Objekt zugreifen?
Die Frage bezieht sich auf das Senden eines ASP.NET MVC AJAX-Formulars von einer Domäne zu einer anderen. Ich bin in der Lage, ähnliche Anfragen mit JQuery zu stellen, indem ich 'xhr.withCredentials = true' setze, aber ich möchte das gleiche vom ASP.NET MVC Ajax Formular machen. Ansonsten funktioniert CORS - das Formular reicht ein, es sendet den Cookie-Header einfach nicht. – Alex