私はこれが厄介であることを知っていますが、私の既存の Web API クライアント コードでは、レコードの読み取りを停止する方法は、webRequest.GetResponse() への呼び出しが読み取り時にクラッシュし、何も見つからず、例外を食べることです (「ブロックを読み取っている」 Web API REST メソッドを呼び出すハンドヘルド デバイスの帯域幅の制限により、一度に /chunk" が送信されます)。
私の良心(いわば)がこのようにすることについて私を悩ませていたので(しかしそれは機能します!)、最初にレコードの数を取得し、その知識を使用して、世界の淡い/端を超えて読むことを排除できるのではないかと考えました。したがって、例外を回避します。
ただし、ここでわかるように: Web API ルーティングが再ルーティングされている/誤ってルーティングされているのはなぜですか? 、複数の GET メソッドにアクセスしようとしても成功しません - 他の GET メソッドを削除することによってのみ、目的の GET メソッドを呼び出すことができました!
私の既存のクライアントコードは次のとおりです。
private void buttonGetInvItemsInBlocks_Click(object sender, EventArgs e)
{
    string formatargready_uri = "http://localhost:28642/api/inventoryItems/{0}/{1}";
    // Cannot start with String.Empty or a blank string (" ") assigned to lastIDFetched; they both fail for some reason - Controller method is not even called. Seems like a bug in Web API to me...
    string lastIDFetched = "0"; 
    const int RECORDS_TO_FETCH = 100; 
    bool moreRecordsExist = true;
    try
    {
        while (moreRecordsExist) 
        {
            formatargready_uri = string.Format("http://localhost:28642/api/InventoryItems/{0}/{1}", lastIDFetched, RECORDS_TO_FETCH);
            var webRequest = (HttpWebRequest)WebRequest.Create(formatargready_uri); 
            webRequest.Method = "GET";
            var webResponse = (HttpWebResponse)webRequest.GetResponse(); // <-- this throws an exception when there is no longer any data left
            // It will hit this when it's done; when there are no records left, webResponse's content is "[]" and thus a length of 2
            if ((webResponse.StatusCode != HttpStatusCode.OK) || (webResponse.ContentLength < 3)) {
                moreRecordsExist = false;
            }
            else // ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 2))
            {
                var reader = new StreamReader(webResponse.GetResponseStream());
                string s = reader.ReadToEnd();
                var arr = JsonConvert.DeserializeObject<JArray>(s);
                foreach (JObject obj in arr)
                {
                    string id = (string)obj["Id"];
                    lastIDFetched = id;
                    int packSize = (Int16)obj["PackSize"];
                    string description = (string)obj["Description"];
                    int dept = (Int16)obj["DeptSubdeptNumber"];
                    int subdept = (Int16)obj["InvSubdepartment"];
                    string vendorId = (string)obj["InventoryName"];
                    string vendorItem = (string)obj["VendorItemId"];
                    double avgCost = (Double)obj["Cost"];
                    double unitList = (Double)obj["ListPrice"];
                    inventoryItems.Add(new WebAPIClientUtils.InventoryItem
                    {
                        Id = id,
                        InventoryName = vendorId,
                        UPC_PLU = vendorId,
                        VendorItemId = vendorItem,
                        PackSize = packSize,
                        Description = description,
                        Quantity = 0.0,
                        Cost = avgCost,
                        Margin = (unitList - avgCost),
                        ListPrice = unitList,
                        DeptSubdeptNumber = dept,
                        InvSubdepartment = subdept
                    });
                    // Wrap around on reaching 100 with the progress bar; it's thus sort of a hybrid determinate/indeterminate value that is shown
                    if (progressBar1.Value >= 100)
                    {
                        progressBar1.Value = 0;
                    }
                    progressBar1.Value += 1;
                }
            } // if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
        } // while
        if (inventoryItems.Count > 0)
        {
            dataGridViewGETResults.DataSource = inventoryItems;
        }
        MessageBox.Show(string.Format("{0} results found", inventoryItems.Count));
    }
    catch (Exception ex)
    {
        // After all records are read, this exception is thrown, so commented out the message; thus, this is really *expected*, and is not an "exception"
        //MessageBox.Show(ex.Message);
    }
}
}
...そして、Web API REST コントローラーのコードは次のとおりです。
public class InventoryItemsController : ApiController
{
    static readonly IInventoryItemRepository inventoryItemsRepository = new InventoryItemRepository();
    public IEnumerable<InventoryItem> GetBatchOfInventoryItemsByStartingID(string ID, int CountToFetch)
    {
        return inventoryItemsRepository.Get(ID, CountToFetch); 
    }
}
...そして(im?)関連するリポジトリコードは次のとおりです。
public IEnumerable<InventoryItem> Get(string ID, int CountToFetch)
{
    return inventoryItems.Where(i => 0 < String.Compare(i.Id, ID)).Take(CountToFetch);
}
次のような方法が考えられると思います。
public IEnumerable<InventoryItem> Get()
{
    return inventoryItems.Count();
}
...これは、引数がないため、他の引数とは異なるものとして認識されます(ルーティングの祭典がなくても、昨日、私による宥和の試みはすべて無知に失敗しました)。