<!-- thumbnail: https://i.sstatic.net/4dJqB.png -->
<!-- version: 2.0 -->
<!-- tag: library -->
<!-- excerpt: This is a StackExchange API v2.0 consumer library written under C#. It is heavily documented and designed to make it as easy as possible to interact with the API. -->
![BridgeStack][1]
#BridgeStack


This is a [StackExchange][2] API v2.0 consumer library written under `C#`. It is heavily documented and designed to make it as easy as possible to interact with the API.


##Example Usage
To get the name of each silver badge you've been awarded on [Stack Overflow][3]:

    var client = new StackClientFactory().Create(_appKey, _token);
    client.Default.Site = NetworkSiteEnum.StackOverflow;
    var parameters = new BadgesOnUserQuery
    {
        Sort = QuerySortEnum.BadgeRank,
        Min = BadgeRankEnum.Silver,
        Max = BadgeRankEnum.Silver
    };
    var badges = client.GetMyBadges(parameters);

    foreach (var badge in badges)
    {
        Console.WriteLine(badge.Name);
    }


##Line by Line Explanation:

    var client = new StackClientFactory().Create(_appKey, _token);
A `StackClient` instance is created, passing in your application's key and the user's access token.

    client.Default.Site = NetworkSiteEnum.StackOverflow;
A default is set so that all requests made through this client which require a target site use [Stack Overflow][4]

    var parameters = new BadgesOnUserQuery
    {
        Sort = QuerySortEnum.BadgeRank,
        Min = BadgeRankEnum.Silver,
        Max = BadgeRankEnum.Silver
    };
A query parameter object is created, using the `Rank` sort on badges, and setting the range to only `Silver` badges.

    var badges = client.GetMyBadges(parameters);
The API is accessed, and the user badges are received from [StackExchange][5].


    foreach (var badge in badges)
    {
        Console.WriteLine(badge.Name);
    }
The badges are then iterated, and their names are output to the console. Note that `badges`, while an `IEnumerable<T>`, contains valuable data other than the actual list items, like paging info, the actual response, exceptions that might have been thrown (and be the reason the enumeration is empty), etc.


##About  
You can read the **wiki documentation on GitHub** [here][6].  
  
I created *BridgeStack* as a way to give back to the [StackOverflow][7] community, which has helped me out and taught me on countless ocassions.  

At all times I attempted to mantain the same philosophy in writting this library. I documented every method, reused as much code as possibly, mirrored the API as heavily as possible, and generally designed it with wrapping away complexity in mind.  
I would appreciate if you let me know what you think of it. I'm sure there's a lot of room for improvement.

Another goal in _BridgeStack_ is to keep the code as clean and it's public facing interfaces as simple as possible.

###Update
I've implemented multi-threading safe response caching and request throttling, these are explained [in this post][8].


##Download
*BridgeStack* can be downloaded following this [link][9] on GitHub.

##License
I'm going with GPL

##Platform
C# .NET 4.0

##Contact
[Nicolas Bevacqua][10]

##Code
*BridgeStack* was written under C# .NET 4.0, though I assume it wouldn't be a problem to port it to other plaforms if enough people were interested in it. You can find the full source code on [GitHub][11].


  [1]: https://i.sstatic.net/4dJqB.png
  [2]: http://stackexchange.com
  [3]: http://stackoverflow.com
  [4]: http://stackoverflow.com
  [5]: http://stackexchange.com
  [6]: https://github.com/bevacqua/BridgeStack/wiki
  [7]: http://stackoverflow.com
  [8]: http://stackapps.com/questions/2945/bridgestack-net-client-library-with-full-2-0-support/2983#2983
  [9]: https://github.com/bevacqua/BridgeStack/zipball/master
  [10]: https://github.com/bevacqua
  [11]: https://github.com/bevacqua/BridgeStack