gpt4 book ai didi

asp.net-mvc - Jquery Ajax后有时会转向获取MVC

转载 作者:行者123 更新时间:2023-12-01 01:36:42 24 4
gpt4 key购买 nike

我的页面中有以下行,每当表单中发生更改时都会调用该行(表单中的更改将保留并存储在 session 中):

function persistFormDetails() {
$.post("<%= Url.Action<AvailabilityController>(action => action.PersistForm(null)) %>", $("form#availabilityForm").serialize());
}

以上内容是从页面上发生的 3 个不同事件调用的:$("select").change、$("#NumberOfNights").change、$("#PromoCode").change。

这是对“PersistForm”的唯一 3 次调用。这在大多数情况下都有效,但 >5% 的情况下,使用 get 而不是 post 调用“PersistForm”。从我们的博客中摘录失败请求的内容:

2012-08-07 06:17:34 120.151.214.16 - HTTP 10.12.0.151 80 POST /availability/persistform - 302 1151 434 0 HTTP/1.1 Mozilla/5.0+(iPhone;+CPU+iPhone+OS+5_1_1+like+Mac+OS+X)+AppleWebKit/534.46+(KHTML,+like+Gecko)+Version/5.1+Mobile/9B206+Safari/7534.48.3 __utma=212581192.532115380.1343637559.1343637559.1344320319.2;+__utmb=212581192.1.10.1344320319;+__utmc=212581192;+__utmz=212581192.1343637559.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);+.BREAKFREEBOOKING=H7n50kf8yh2VLsbC2Czo6LALPpef1jqj4RtcC4l34Q-fA3WKG8dD5Dps9CFq2i3j-YEVMEH5qTh_b5f7IDRJ5NYeB28gBV_czMmGeSfnd26FHsw83WbwBpz2K3oAVYCg6dG_MiOKqrpn8ViaBizKMKXD4yw1;+stella_referrer=referrerGuestId=14076864270&additionalInfo=mantra_on_kent_24h_sale30aug12&referrerSite= http://m.mantra.com.au/check-availability
2012-08-07 06:17:34 120.151.214.16 - HTTP 10.12.0.152 80 GET /availability/persistform chkCookies=True 302 950 353 0 HTTP/1.1 Mozilla/5.0+(iPhone;+CPU+iPhone+OS+5_1_1+like+Mac+OS+X)+AppleWebKit/534.46+(KHTML,+like+Gecko)+Version/5.1+Mobile/9B206+Safari/7534.48.3 __utma=212581192.532115380.1343637559.1343637559.1344320319.2;+__utmb=212581192.2.10.1344320319;+__utmc=212581192;+__utmz=212581192.1343637559.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);+.testCookie=.testCookie;+.BREAKFREEBOOKING=H7n50kf8yh2VLsbC2Czo6LALPpef1jqj4RtcC4l34Q-fA3WKG8dD5Dps9CFq2i3j-YEVMEH5qTh_b5f7IDRJ5NYeB28gBV_czMmGeSfnd26FHsw83WbwBpz2K3oAVYCg6dG_MiOKqrpn8ViaBizKMKXD4yw1;+stella_referrer=referrerGuestId=14076864270&additionalInfo=mantra_on_kent_24h_sale30aug12&referrerSite= http://m.mantra.com.au/check-availability

请注意,第一次调用“PersistForm”会执行一次发布(正确),但随后会执行 302(不确定为什么会重定向)。然后,同一用户在同一 session 和时间的下一次调用将调用“PersistForm”,这次使用的是 get。然后我们得到一个异常“在 Controller ‘MG.Mobile.Controllers.AvailabilityController’上找不到公共(public)操作方法‘persistform’”。

这是有道理的,因为我的“PersistForm”操作具有 HttpPost 属性。

[HttpPost]
public ActionResult PersistForm(AvailabilityForm form)
{
var model = _availabilityMapper.MapViewToDomain(form);
_availabilitySession.SaveAvailabilityToSession(model);

return new EmptyResult();
}

我们不能允许获取此操作,因为它会发布大量数据。正如我之前所说,这种情况只发生大约 5% 的时间(也许更少)。

关于为什么我有时会得到“get”而不是“post”或者为什么有时会调用“persistform”302(重定向)有什么想法吗?

这是针对我们的移动网站的,问题仅在 iPhone 上出现(但这可能只是巧合,因为 75% 的移动访问我们的网站都是通过 iPhone 进行的)。

最佳答案

有趣的问题。我在这里提出了一些我的假设。

我可以看到你的 Controller 是Sessionfull的。这意味着每个请求都会锁定 Session 对象,因此来自同一客户端的多个请求将被一一处理(请求会等待 Session 锁被释放)。

一旦你得到太多,服务器可能会达到某个阈值,因此,重定向请求。

尝试的选项:

  1. 对于负载如此重的 API,最好采用无 session 模型。
  2. 尝试使用 ASP.NET MVC 异步 Controller 。

关于asp.net-mvc - Jquery Ajax后有时会转向获取MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com