Skip to content

Instantly share code, notes, and snippets.

View darrelmiller's full-sized avatar

Darrel darrelmiller

View GitHub Profile
@darrelmiller
darrelmiller / gist:3628687
Created September 5, 2012 01:00
Perf testing Web API
// Server
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
@darrelmiller
darrelmiller / gist:3018588
Created June 29, 2012 15:24
Xml Hal version of Mnot's json-problem example
<resource href="/ErrorLog/2323234">
<resource rel="http://example.com/probs/out-of-credit" ref="/ErrorLog/2323234/details">
<title>"You do not have enough credits."</title>
<detail>"Your current balance is 30, but that costs 50."</title>
<balance>30</balance>
<account>http://api.example.com/account/12345</account>
</resource>
</resource>
public interface IHttpService<T> {
HttpResponseMessage<T> Get(HttpRequestMessage<T> request);
HttpResponseMessage<T> Put(HttpRequestMessage<T> request);
HttpResponseMessage<T> Post(HttpRequestMessage<T> request);
HttpResponseMessage<T> Delete(HttpRequestMessage<T> request);
}
GET POST /gists
GET /gists/public
GET /gists/starred
GET PATCH DELETE /gists/:id
GET /gists/:gist_id/comments
PUT /gists/:id/star
POST /gists/:id/fork
@darrelmiller
darrelmiller / gist:2703205
Created May 15, 2012 16:51
Hierarchical MVC routing
var router = new ApiRouter("api").DispatchTo<RootController>()
.Add(new ApiRouter("Contacts").DispatchTo<ContactsController>())
.Add(new ApiRouter("Contact").WithHandler(new LoggingHandler())
.Add(new ApiRouter("{contactid}")
.WithConstraint("contactid", @"\d+")
.DispatchTo<ContactController>()
.Add(new ApiRouter("Address")
.Add(new ApiRouter("{addressid}")
@darrelmiller
darrelmiller / gist:2504054
Created April 26, 2012 23:17
SimpleFormatter<T>
public class SimpleFormatter<T> : MediaTypeFormatter
{
private readonly Action<T,Stream> _write;
private readonly Func<Stream,T> _read;
public SimpleFormatter(MediaTypeHeaderValue mediatype, Func<Stream,T> read, Action<T,Stream> write)
{
_write = write;
_read = read;
SupportedMediaTypes.Add(mediatype);
@darrelmiller
darrelmiller / gist:2354832
Created April 10, 2012 21:46
GET Customer Api
// CustomerController
public override Stream Get() {
var model = new CustomerModel(Container, _CustomerId);
var view = new CustomerDetailView(Container);
return view.Render(model);
@darrelmiller
darrelmiller / gist:2026145
Created March 13, 2012 02:04
ThroughputMessageHandler
public class ThroughputMessageHandler : DelegatingHandler
{
private readonly ILogger _logger;
private Timer _timer;
private int _count;
public ThroughputMessageHandler(ILogger logger)
{
_logger = logger;
_count = 0;
_timer = new Timer(new TimerCallback(timerCallback),null,1000,1000);
public class PlainTextFormatter : MediaTypeFormatter
{
public PlainTextFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
}
protected override System.Threading.Tasks.Task<object> OnReadFromStreamAsync(Type type, System.IO.Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext)
{
return new Task<object>(() =>
@darrelmiller
darrelmiller / gist:1989131
Created March 6, 2012 21:46
Conneg with quality
[TestMethod]
public void ConnegTest()
{
var selector = new FormatterSelector();
var response = new HttpResponseMessage();
response.RequestMessage = new HttpRequestMessage();
var headers = response.RequestMessage.Headers;
headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json",0.8));