Beispiel #1
0
    public void RejectsUnsupportedType()
    {
        var ex = Assert.Throws <NotSupportedException>(
            () => QueryParameterValueSupplier.ForType(typeof(UnsupportedType)));

        Assert.Equal("Querystring values cannot be parsed as type 'System.Object'.", ex.Message);
    }
Beispiel #2
0
    public void CannotMapSingleQueryParameterToMultipleProperties()
    {
        var ex = Assert.Throws <InvalidOperationException>(
            () => QueryParameterValueSupplier.ForType(typeof(MapSingleQueryParameterToMultipleProperties)));

        Assert.Contains("declares more than one mapping for the query parameter 'a'.", ex.Message, StringComparison.OrdinalIgnoreCase);
    }
Beispiel #3
0
    private void RenderPageWithParameters(RenderTreeBuilder builder)
    {
        builder.OpenComponent(0, RouteData.PageType);

        foreach (var kvp in RouteData.RouteValues)
        {
            builder.AddAttribute(1, kvp.Key, kvp.Value);
        }

        var queryParameterSupplier = QueryParameterValueSupplier.ForType(RouteData.PageType);

        if (queryParameterSupplier is not null)
        {
            // Since this component does accept some parameters from query, we must supply values for all of them,
            // even if the querystring in the URI is empty. So don't skip the following logic.
            var url = NavigationManager.Uri;
            ReadOnlyMemory <char> query = default;
            var queryStartPos           = url.IndexOf('?');
            if (queryStartPos >= 0)
            {
                var queryEndPos = url.IndexOf('#', queryStartPos);
                query = url.AsMemory(queryStartPos..(queryEndPos < 0 ? url.Length : queryEndPos));
            }
            queryParameterSupplier.RenderParametersFromQueryString(builder, query);
        }

        builder.CloseComponent();
    }
    /// <summary>
    /// BuildRenderTree 方法
    /// </summary>
    /// <param name="builder"></param>
    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        // 判断是否开启权限
        if (Authorized && Type != null)
        {
            var index = 0;
            builder.OpenComponent(index++, Type);
            foreach (var kv in (Parameters ?? new ReadOnlyDictionary <string, object>(new Dictionary <string, object>())))
            {
                builder.AddAttribute(index++, kv.Key, kv.Value);
            }
#if NET6_0_OR_GREATER
            BuildQueryParameters();
#endif
            builder.CloseComponent();
        }
        else
        {
            builder.AddContent(0, NotAuthorized);
        }

#if NET6_0_OR_GREATER
        void BuildQueryParameters()
        {
            var queryParameterSupplier = QueryParameterValueSupplier.ForType(Type);

            if (queryParameterSupplier is not null)
            {
                // Since this component does accept some parameters from query, we must supply values for all of them,
                // even if the querystring in the URI is empty. So don't skip the following logic.
                var url           = NavigationManager.Uri;
                var queryStartPos = url.IndexOf('?');

                var query = queryStartPos < 0 ? default : url.AsMemory(queryStartPos);
                            queryParameterSupplier.RenderParametersFromQueryString(builder, query);
            }
        }
#endif
    }
Beispiel #5
0
 public void ComponentWithNoQueryParametersHasNoSupplier()
 {
     Assert.Null(QueryParameterValueSupplier.ForType(typeof(NoQueryParameters)));
 }