示例#1
0
    public void ParseCatchAllVerb()
    {
        var pattern = HttpRoutePattern.Parse("/a/{b=*}/**:verb");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/a/{b}/{**__Discard_2}", adapter.ResolvedRouteTemplate);
    }
示例#2
0
    public void ParseManyVariables()
    {
        var pattern = HttpRoutePattern.Parse("/{a}/{b}/{c}");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/{a}/{b}/{c}", adapter.ResolvedRouteTemplate);
    }
示例#3
0
    public void ParseAnyAndCatchAllSegment2()
    {
        var pattern = HttpRoutePattern.Parse("/*/a/**");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/{__Discard_0}/a/{**__Discard_2}", adapter.ResolvedRouteTemplate);
        Assert.Empty(adapter.RewriteVariableActions);
    }
示例#4
0
    public void ParseVerb()
    {
        var pattern = HttpRoutePattern.Parse("/a:foo");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/a", adapter.ResolvedRouteTemplate);
        Assert.Empty(adapter.RewriteVariableActions);
    }
示例#5
0
    public void ParseAnySegment()
    {
        var pattern = HttpRoutePattern.Parse("/*") !;
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/{__Discard_0}", adapter.ResolvedRouteTemplate);
        Assert.Empty(adapter.RewriteVariableActions);
    }
示例#6
0
    public void ParseMultipleVariables()
    {
        var pattern = HttpRoutePattern.Parse("/shelves/{shelf}/books/{book}");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/shelves/{shelf}/books/{book}", adapter.ResolvedRouteTemplate);
        Assert.Empty(adapter.RewriteVariableActions);
    }
示例#7
0
    public void ParseComplexCatchAll()
    {
        var pattern = HttpRoutePattern.Parse("/a/{b=**}");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/a/{**b}", adapter.ResolvedRouteTemplate);
        Assert.Empty(adapter.RewriteVariableActions);
    }
示例#8
0
    public void ParseComplexNestedFieldPath()
    {
        var pattern = HttpRoutePattern.Parse("/a/{a.b.c=*}");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/a/{a.b.c}", adapter.ResolvedRouteTemplate);
        Assert.Empty(adapter.RewriteVariableActions);
    }
示例#9
0
    public void ParseComplexPathCatchAll()
    {
        var pattern = HttpRoutePattern.Parse("/a/{b=c/**}");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/a/c/{**__Complex_b_2}", adapter.ResolvedRouteTemplate);

        var httpContext = new DefaultHttpContext();

        httpContext.Request.RouteValues = new RouteValueDictionary
        {
            { "__Complex_b_2", "value" }
        };

        adapter.RewriteVariableActions[0](httpContext);

        Assert.Equal("c/value", httpContext.Request.RouteValues["b"]);
    }
示例#10
0
    public void ParseComplexPrefixSuffixCatchAll()
    {
        var pattern = HttpRoutePattern.Parse("/{x.y.z=a/**/b}/c/d");
        var adapter = JsonTranscodingRouteAdapter.Parse(pattern);

        Assert.Equal("/a/{**__Complex_x.y.z_1:regex(b/c/d$)}", adapter.ResolvedRouteTemplate);

        var httpContext = new DefaultHttpContext();

        httpContext.Request.RouteValues = new RouteValueDictionary
        {
            { "__Complex_x.y.z_1", "my/value/b/c/d" }
        };

        adapter.RewriteVariableActions[0](httpContext);

        Assert.Equal("a/my/value/b", httpContext.Request.RouteValues["x.y.z"]);
    }
示例#11
0
    public void ParseComplexVariable()
    {
        var route   = HttpRoutePattern.Parse("/v1/{book.name=shelves/*/books/*}");
        var adapter = JsonTranscodingRouteAdapter.Parse(route);

        Assert.Equal("/v1/shelves/{__Complex_book.name_2}/books/{__Complex_book.name_4}", adapter.ResolvedRouteTemplate);
        Assert.Single(adapter.RewriteVariableActions);

        var httpContext = new DefaultHttpContext();

        httpContext.Request.RouteValues = new RouteValueDictionary
        {
            { "__Complex_book.name_2", "first" },
            { "__Complex_book.name_4", "second" }
        };

        adapter.RewriteVariableActions[0](httpContext);

        Assert.Equal("shelves/first/books/second", httpContext.Request.RouteValues["book.name"]);
    }
 public CallHandlerDescriptorInfo(
     FieldDescriptor?responseBodyDescriptor,
     MessageDescriptor?bodyDescriptor,
     bool bodyDescriptorRepeated,
     List <FieldDescriptor>?bodyFieldDescriptors,
     Dictionary <string, List <FieldDescriptor> > routeParameterDescriptors,
     JsonTranscodingRouteAdapter routeAdapter)
 {
     ResponseBodyDescriptor    = responseBodyDescriptor;
     BodyDescriptor            = bodyDescriptor;
     BodyDescriptorRepeated    = bodyDescriptorRepeated;
     BodyFieldDescriptors      = bodyFieldDescriptors;
     RouteParameterDescriptors = routeParameterDescriptors;
     RouteAdapter = routeAdapter;
     if (BodyFieldDescriptors != null)
     {
         BodyFieldDescriptorsPath = string.Join('.', BodyFieldDescriptors.Select(d => d.Name));
     }
     PathDescriptorsCache = new ConcurrentDictionary <string, List <FieldDescriptor>?>();
 }