private string CreateHref(PaperContext ctx, T paper) { var paperInfo = PaperSpec.GetSpec <T>(); var paperTemplate = new UriTemplate(paperInfo.Route); paperTemplate.SetArgsFromGraph(paper); var uri = paperTemplate.CreateUri(); var targetUri = new Route(uri); targetUri = targetUri.SetArg( "f", ctx.PathArgs["f"], "in", ctx.PathArgs["in"], "out", ctx.PathArgs["out"] ); var filter = paper._Get <IFilter>("Filter"); if (filter != null) { var map = new FieldMap(filter); var args = ( from field in map where field.Value != null select new[] { field.Key.ChangeCase(TextCase.CamelCase), field.Value } ).SelectMany(); targetUri = targetUri.SetArg(args); } return(targetUri.ToString()); }
public void Add(Type paperType) { try { var info = PaperSpec.GetSpec(paperType); typeIndex.Add(info.Type, info); pathIndex.Add(info.Route, info); } catch (Exception ex) { ex.Trace($"[PAPER]FAULT: {paperType.FullName}: {string.Join(",", ex.GetCauseMessages())}"); } }