【发布时间】:2011-12-09 16:27:32
【问题描述】:
我将 AJAX 表单从 http 方案中的页面发送到 https url(域和应用程序是相同的)。我使用 MVC 3 Ajax 助手:
@using (Ajax.BeginForm(MVC.Payment.Confirm(), new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = "myId",
InsertionMode = InsertionMode.Replace,
OnBegin = "$('#popupAjaxLoader').show();",
OnSuccess = "$('#popupAjaxLoader').hide();",
Url = "https://same.domain/payment/confirm"
}, new { @action = "https://same.domain.com/payment/confirm" }))
{
...
}
在应用程序中我使用表单身份验证:
<forms loginUrl="~/Account/LogOn" timeout="2880" name="MYCOOKIENAME" />
在firebug中我可以看到提交表单时没有将身份验证cookie发送到服务器,因此处理程序失败(请求需要授权)。 如何强制 Ajax.BegiForm 附加身份验证 cookie?
更新:
事实证明,如果不需要从 ajax 请求中接收任何信息,那么courtlorben 给出的解决方案是有效的。将 Ajax POST 从 HTTP 发送到 HTTPS 工作正常(未附加 cookie,因此您必须将所有必要的数据作为隐藏的表单字段发布),但由于同源策略,javascript 无法访问服务器响应。 最终我不得不放弃 Ajax 并将表单放在 iframe 中引用 HTTPS url,这似乎是解决这个问题的最终解决方案。
【问题讨论】:
标签: jquery ajax asp.net-mvc-3 cookies https