Skip to content

Instantly share code, notes, and snippets.

@johnsheehan
Created April 29, 2011 04:17
Show Gist options
  • Select an option

  • Save johnsheehan/947826 to your computer and use it in GitHub Desktop.

Select an option

Save johnsheehan/947826 to your computer and use it in GitHub Desktop.
some ideas for the next restsharp
var http = new Http("https://api.twilio.com/{version}/Accounts");
http.AddUrlSegment("version", "2010-04-01");
http.AddParameter("name", "value");
http.Authenticate = (request) => // authenticators would just follow this contract
{
request.AddHeader("name", "value");
};
http.Complete = (response, data) =>
{
// data is dynamic
// if response content type matches registered handler, it deserializes
// otherwise it's just the response body as string
};
// for any exception except WebException
http.Error = (error) =>
{
// handle error
};
http.Post();
@ayoung
Copy link
Copy Markdown

ayoung commented Apr 29, 2011

var twilio = new Http("http://api.twilio.com/{version}/Accounts");
twilio.Post(opt =>
{
    opt.Segments["version"] = "2010-04-01";
    opt.Params["name"] = "value";
    opt.Headers["name"] = "value";
    opt.State = someObject;
    opt.OnComplete = (response, data) => {};
    opt.OnError = (error) => {};
});

@johnsheehan
Copy link
Copy Markdown
Author

Segments, Params, Headers, etc could all be dynamic too I suppose.

@johnsheehan
Copy link
Copy Markdown
Author

I was also thinking of maybe doing URL segments all in the constructor:

var twilio = new Http("http://api.twilio.com/{0}/Accounts", version);

or

var twilio = new Http("http://api.twilio.com/{version}/Accounts", new { version = "123" });

@ayoung
Copy link
Copy Markdown

ayoung commented Apr 29, 2011

Segments, Params and Headers wouldn't work well as dynamics because the names for these do not match the naming rules for C# properties.

opt.Headers.Accept-Charset = "utf-8";  // not valid C#

I like the first version of the constructor. Its a more familiar pattern of string formatting, less typing, and less effort to implement -- although RestSharp already does something similar to the latter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment