PipelineContinuation ResolveResource(ICommunicationContext context) { if (context.PipelineData.SelectedResource == null) { var uriToMath = context.GetRequestUriRelativeToRoot(); var uriMatch = _uriRepository.Match(uriToMath); if (uriMatch != null) { context.PipelineData.SelectedResource = uriMatch; context.PipelineData.ResourceKey = uriMatch.ResourceKey; context.Request.UriName = uriMatch.UriName; } else { context.OperationResult = CreateNotFound(context); return(PipelineContinuation.RenderNow); } } else { Log.WriteInfo( "Not resolving any resource as a resource with key {0} has already been selected.".With( context.PipelineData.SelectedResource.ResourceKey)); } return(PipelineContinuation.Continue); }
public bool Parse(Uri uri, out Uri processedUri) { processedUri = null; var appBaseUri = _context.ApplicationBaseUri.EnsureHasTrailingSlash(); var fakeBaseUri = new Uri("http://localhost/", UriKind.Absolute); var uriRelativeToAppBase = appBaseUri .MakeRelativeUri(uri) .MakeAbsolute(fakeBaseUri); // find the resource type for the uri string lastUriSegment = uriRelativeToAppBase.Segments[uriRelativeToAppBase.Segments.Length - 1]; int lastDot = lastUriSegment.LastIndexOf("."); if (lastDot == -1) { return(false); } var uriWithoutExtension = ChangePath(uriRelativeToAppBase, srcUri => srcUri.AbsolutePath.Substring(0, srcUri.AbsolutePath.LastIndexOf("."))); _resourceMatch = _uris.Match(uriWithoutExtension); if (_resourceMatch == null) { return(false); } string potentialExtension = lastUriSegment.Substring(lastDot + 1); // _codecs. _selectedCodec = _codecs.FindByExtension(_resourceMatch.ResourceKey as IType, potentialExtension); if (_selectedCodec == null) { return(false); } processedUri = fakeBaseUri.MakeRelativeUri(uriWithoutExtension) .MakeAbsolute(appBaseUri); // TODO: Ensure that if the Accept: is not compatible with the overriden value a 406 is returned. return(true); }
public void ParseStringUriTemplates() { var match = uriResolver.Match(ExpectedUri); }
public UriRegistration Match(Uri uriToMatch) { return(_inner.Match(uriToMatch)); }