2015-07-21 68 views
0

我有一个带有webClient和webAPI的单页面应用程序。当我去一个有表格的视图时,我的表格没有被更新。实际上,只有在应用程序启动时才会调用API,即使它每次都会被调用,或者我期望发生的事情。Rest API并不总是被调用

服务代码 -

function getPagedResource(baseResource, pageIndex, pageSize) { 
    var resource = baseResource; 
    resource += (arguments.length == 3) ? buildPagingUri(pageIndex, pageSize) : ''; 
    return $http.get(serviceBase + resource).then(function (response) { 
     var accounts = response.data; 
     extendAccounts(accounts); 
     return { 
      totalRecords: parseInt(response.headers('X-InlineCount')), 
      results: accounts 
     }; 
    }); 
} 

factory.getAccountsSummary = function (pageIndex, pageSize) { 
    return getPagedResource('getAccounts', pageIndex, pageSize); 
}; 

API控制器 -

[Route("getAccounts")] 
[EnableQuery] 
public HttpResponseMessage GetAccounts() 
{ 
    int totalRecords; 
    var accountsSummary = AccountRepository.GetAllAccounts(out totalRecords); 
    HttpContext.Current.Response.Headers.Add("X-InlineCount", totalRecords.ToString()); 
    return Request.CreateResponse(HttpStatusCode.OK, accountsSummary); 
} 

我可以跟踪到服务,但它不会打在控制器一个破发点。

+1

您确定您的后续调用不是简单地被缓存,因此在第一次请求后从未击中控制器?尝试在控制器端添加[这组响应头](http://stackoverflow.com/a/2068407/752918),看看它是否有任何作用。 –

+0

何时调用'factory.getAccountsSummary'函数? – mrodrigues

+0

在控制器的Init()上调用了factory.getAccountsSummary。 – Craig

回答

1

我将此添加到我的web.config文件REST API项目,现在它的作品,因为我需要它 -

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Cache-Control" value="no-cache, no-store, must-revalidate" /> 
     <!-- HTTP 1.1. --> 
     <add name="Pragma" value="no-cache" /> 
     <!-- HTTP 1.0. --> 
     <add name="Expires" value="0" /> 
     <!-- Proxies. --> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 

谢谢大家指着我在正确的方向!

0

我怀疑REST服务响应在第一次调用时会缓存在浏览器中。因此,在REST服务端添加标题以响应不缓存或在请求中添加一些额外的可更改参数(如时间戳)以确保浏览器不会选取响应表单缓存。

+0

你能给我一些示例代码吗? – Craig

相关问题