protected void RespondTo(IApiMethodCall method, HttpContextBase context) { try { context.Response.Cache.SetETag(Guid.NewGuid().ToString("N")); context.Response.Cache.SetMaxAge(TimeSpan.FromSeconds(0)); } catch (Exception) { //Nothing happens if we didn't set cache tags } IApiResponder responder = null; if (method != null && method.Responders != null && method.Responders.Any()) { try { //Try custom responders var methodCustomResponders = new List <IApiResponder>(method.Responders); responder = methodCustomResponders.FirstOrDefault(x => x != null && x.CanRespondTo(ApiResponce, context)); } catch (Exception) { Log.Warn("Custom reponder for {0} failed", method.ToString()); } } if (responder == null) { responder = Container.ResolveAll <IApiResponder>().FirstOrDefault(x => x.CanRespondTo(ApiResponce, context)); } if (responder != null) { try { responder.RespondTo(ApiResponce, context); } catch (Exception e) { Log.Error(e, "Error while responding!"); throw; } } else { Log.Error(null, "no formatter error"); throw new HttpException((int)HttpStatusCode.BadRequest, "No formatter"); } }
public CustomSerializer(Type serializerType, IApiResponder responder) { SerializerType = serializerType; Responder = responder; }