[英]Why is my JSON data getting changed when passed to a WEB.API Ajax call?
[英]Why are my requests to web.api being blocked by long running controller code?
我正在使用angular向Web.API(托管IIS 8.5)发出Ajax调用的本地开发环境。 我正在通过不同的角度控制器同时拨打5个电话,每个电话看起来都像这样:
$scope.medications = API.Client.MedicationProfiles.query({ clientId: clientId });
API服务对Client.MedicationProfiles资源具有以下定义:
this.Client.MedicationProfiles = $resource(
'/Noteable.API/api/Client/:clientId/MedicationProfiles/:id',
{
clientId: '@clientId',
id: '@Id'
},
{
update: { method: 'PUT' }
}
);
当页面加载时,我基本上可以看到所有使用chrome dev工具一次发送到服务器的请求,但是看起来它们一次又一次返回,就好像它们是同步运行的一样。 我在Web.API控制器操作之一中放入了一个thread.sleep,很确定,在那之后发出的所有调用都无法返回,直到正在休眠的调用才返回。 这对我来说没有任何意义,我想知道是否有人可以告诉我在什么情况下会发生这种情况。
这可能是在Web api后端上实现异步模式的一个好情况-一旦ajax调用碰到了控制器,就可以避免阻塞。 这可以通过利用async
和await
模式来实现。 您将要返回一个Task
,它代表一个异步操作。
一个例子可能包括...
public async Task<IHttpActionResult> Put(string clientId)
{
var response = await this.yourService.yourSavingMethod(clientId);
return Ok(response);
}
另请参阅SO问题为什么此Web api控制器为什么不并发? 有关此问题的更多详细信息和见解。 此外,ASP.NET会话状态的默认行为可以更改以适应并发请求。 一个例子可能包括
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly)
我认为您的问题是由浏览器或ASP.NET引起的。 如果是ASP.NET,请看以下线程:
如果是您的浏览器,请使用示例代码查看此线程:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.