![](/img/trans.png)
[英]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.