public override bool TryBinding(IHttpContext context, IPathStack path, object controller, out IHttpHandler handler) { if (path.IsAtEnd) { handler = null; return(false); } string method = path.Pop(); if (!path.IsAtEnd) { handler = null; return(false); } IService service = controller as IService; if (service == null) { throw new Exception("ProtobufControllerAttribute can only be applied to classes implementing IService."); } var descriptor = service.DescriptorForType.FindMethodByName(method); if (descriptor == null) { handler = null; return(false); } IMessage request; string verb = context.Request.HttpMethod; if (verb == "GET") { request = null; } else if (verb == "POST" && context.Request.ContentType == CONTENT_TYPE) { request = service.GetRequestPrototype(descriptor) .WeakToBuilder() .WeakMergeFrom(CodedInputStream.CreateInstance(context.Request.InputStream)) .WeakBuild(); } else { handler = null; return(false); } handler = new ProtobufServiceHandler(service, descriptor, request); return(true); }
public override bool TryBinding(IHttpContext context, IPathStack path, object controller, out IHttpHandler handler) { if (path.IsAtEnd){ handler = null; return false; } string method = path.Pop(); if (!path.IsAtEnd){ handler = null; return false; } IService service = controller as IService; if (service == null) throw new Exception("ProtobufControllerAttribute can only be applied to classes implementing IService."); var descriptor = service.DescriptorForType.FindMethodByName(method); if (descriptor == null){ handler = null; return false; } IMessage request; string verb = context.Request.HttpMethod; if (verb == "GET") { request = null; } else if (verb == "POST" && context.Request.ContentType == CONTENT_TYPE) { request = service.GetRequestPrototype(descriptor) .WeakToBuilder() .WeakMergeFrom(CodedInputStream.CreateInstance(context.Request.InputStream)) .WeakBuild(); } else { handler = null; return false; } handler = new ProtobufServiceHandler(service, descriptor, request); return true; }