public async Task FormCollectionModelBinder_ValidType_BindSuccessful()
        {
            // Arrange
            var formCollection = new FormCollection(new Dictionary<string, StringValues>
            {
                { "field1", "value1" },
                { "field2", "value2" }
            });
            var httpContext = GetMockHttpContext(formCollection);
            var bindingContext = GetBindingContext(typeof(IFormCollection), httpContext);
            var binder = new FormCollectionModelBinder();

            // Act
            var result = await binder.BindModelResultAsync(bindingContext);

            // Assert
            Assert.NotEqual(default(ModelBindingResult), result);
            Assert.True(result.IsModelSet);

            Assert.Empty(bindingContext.ValidationState);

            var form = Assert.IsAssignableFrom<IFormCollection>(result.Model);
            Assert.Equal(2, form.Count);
            Assert.Equal("value1", form["field1"]);
            Assert.Equal("value2", form["field2"]);
        }
    public async Task FormCollectionModelBinder_ValidType_BindSuccessful()
    {
        // Arrange
        var formCollection = new FormCollection(new Dictionary <string, StringValues>
        {
            { "field1", "value1" },
            { "field2", "value2" }
        });
        var httpContext    = GetMockHttpContext(formCollection);
        var bindingContext = GetBindingContext(typeof(IFormCollection), httpContext);
        var binder         = new FormCollectionModelBinder(NullLoggerFactory.Instance);

        // Act
        await binder.BindModelAsync(bindingContext);

        // Assert
        Assert.True(bindingContext.Result.IsModelSet);
        Assert.Empty(bindingContext.ValidationState);

        var form = Assert.IsAssignableFrom <IFormCollection>(bindingContext.Result.Model);

        Assert.Equal(2, form.Count);
        Assert.Equal("value1", form["field1"]);
        Assert.Equal("value2", form["field2"]);
    }
示例#3
0
        Task <JToken> GetFormJTokenAsync
        (
            this ModelBindingContext target
        )
        {
            JToken r = null;
            var    formCollectionModelBinder =
                new FormCollectionModelBinder
                (
                    NullLoggerFactory
                    .Instance
                );
            await
            formCollectionModelBinder
            .BindModelAsync(target);

            if
            (
                target
                .Result
                .IsModelSet
            )
            {
                r = JTokenWebHelper
                    .ToJToken
                    (
                    (IFormCollection)
                    target
                    .Result
                    .Model
                    );
            }
            return(r);
        }
示例#4
0
        public ActionResult Insert(FormCollectionModelBinder form, JobEntity objpost)

        {
            try
            {
                jobRepository.Insert(objpost);

                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task FormCollectionModelBinder_NoForm_BindSuccessful_ReturnsEmptyFormCollection()
        {
            // Arrange
            var httpContext = GetMockHttpContext(null, hasForm: false);
            var bindingContext = GetBindingContext(typeof(IFormCollection), httpContext);
            var binder = new FormCollectionModelBinder();

            // Act
            var result = await binder.BindModelResultAsync(bindingContext);

            // Assert
            Assert.NotEqual(default(ModelBindingResult), result);
            var form = Assert.IsAssignableFrom<IFormCollection>(result.Model);
            Assert.Empty(form);
        }
    public async Task FormCollectionModelBinder_NoForm_BindSuccessful_ReturnsEmptyFormCollection()
    {
        // Arrange
        var httpContext    = GetMockHttpContext(null, hasForm: false);
        var bindingContext = GetBindingContext(typeof(IFormCollection), httpContext);
        var binder         = new FormCollectionModelBinder(NullLoggerFactory.Instance);

        // Act
        await binder.BindModelAsync(bindingContext);

        // Assert
        Assert.True(bindingContext.Result.IsModelSet);
        var form = Assert.IsAssignableFrom <IFormCollection>(bindingContext.Result.Model);

        Assert.Empty(form);
    }
示例#7
0
            public async Task BindModelAsync(ModelBindingContext bindingContext)
            {
                if (bindingContext.HttpContext.Request.HasFormContentType)
                {
                    var formBinder = new FormCollectionModelBinder();
                    await formBinder.BindModelAsync(bindingContext);

                    if (bindingContext.Result.IsModelSet)
                    {
                        bindingContext.Result =
                            ModelBindingResult.Success(ToJToken((IFormCollection)bindingContext.Result.Model));
                    }
                }
                else
                {
                    if (bindingContext.HttpContext.Request.ContentType == "application/json")
                    {
                        try
                        {
                            var readStreamTask = new StreamReader(bindingContext.HttpContext.Request.Body).ReadToEndAsync();
                            var json           = await readStreamTask;
                            using (var sr = new StringReader(json))
                                using (var jtr = new JsonTextReader(sr)
                                {
                                    DateParseHandling = DateParseHandling.None
                                })
                                {
                                    bindingContext.Result = ModelBindingResult.Success(JToken.ReadFrom(jtr));
                                }
                        }
                        catch (Exception ex)
                        {
                            var bindingContextResult = ModelBindingResult.Failed();
                            bindingContext.Result = bindingContextResult;
                        }
                    }
                }
            }
示例#8
0
        public async Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var request = bindingContext
                          .HttpContext
                          .Request;
            JToken jToken = null;

            async void RequestBodyProcess()
            {
                if (request.HasFormContentType)
                {
                    var formBinder = new FormCollectionModelBinder();
                    await formBinder.BindModelAsync(bindingContext);

                    if (bindingContext.Result.IsModelSet)
                    {
                        jToken = JTokenWebHelper
                                 .ToJToken
                                 (
                            (IFormCollection)
                            bindingContext
                            .Result
                            .Model
                                 );
                    }
                }
                else
                {
                    //if (request.IsJsonRequest())
                    {
                        using (var streamReader = new StreamReader(request.Body))
                        {
                            var   task = streamReader.ReadToEndAsync();
                            await task;
                            var   json = task.Result;
                            if (!json.IsNullOrEmptyOrWhiteSpace())
                            {
                                jToken = JToken.Parse(json);
                            }
                        }
                    }
                }
            }

            void RequestHeaderProcess()
            {
                var qs = request.QueryString.Value;

                qs = HttpUtility
                     .UrlDecode
                     (
                    qs
                     );
                qs = qs.TrimStart('?');
                var isJson = false;

                try
                {
                    jToken = JToken.Parse(qs);
                    isJson = jToken is JObject;
                }
                catch
                {
                }
                if (!isJson)
                {
                    jToken = request.Query.ToJToken();
                }
            }

            if
            (
                string.Compare(request.Method, "get", true) == 0
            )
            {
                RequestHeaderProcess();
                if (jToken == null)
                {
                    RequestBodyProcess();
                }
            }
            else
            //if
            //(
            //    string.Compare(request.Method, "get", true) == 0
            //)
            {
                RequestBodyProcess();
                if (jToken == null)
                {
                    RequestHeaderProcess();
                }
            }
            bindingContext
            .Result =
                ModelBindingResult
                .Success
                (
                    jToken
                );
        }
        public async Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var request = bindingContext
                          .HttpContext
                          .Request;

            JToken jToken = null;

            async void RequestFormBodyProcess()
            {
                if (request.HasFormContentType)
                {
                    var formCollectionModelBinder = new FormCollectionModelBinder(NullLoggerFactory.Instance);
                    await formCollectionModelBinder.BindModelAsync(bindingContext);

                    if (bindingContext.Result.IsModelSet)
                    {
                        jToken = JTokenWebHelper
                                 .ToJToken
                                 (
                            (IFormCollection)
                            bindingContext
                            .Result
                            .Model
                                 );
                    }
                }
                else
                {
                    //if (request.IsJsonRequest())
                    {
                        using (var streamReader = new StreamReader(request.Body))
                        {
                            var   task = streamReader.ReadToEndAsync();
                            await task;
                            var   json = task.Result;
                            if (!json.IsNullOrEmptyOrWhiteSpace())
                            {
                                jToken = JToken.Parse(json);
                            }
                        }
                    }
                }
            }

            void RequestQueryStringHeaderProcess()
            {
                var qs = request.QueryString.Value;

                if (qs.IsNullOrEmptyOrWhiteSpace())
                {
                    return;
                }
                qs = HttpUtility
                     .UrlDecode
                     (
                    qs
                     );
                if (qs.IsNullOrEmptyOrWhiteSpace())
                {
                    return;
                }
                qs = qs.TrimStart('?');
                if (qs.IsNullOrEmptyOrWhiteSpace())
                {
                    return;
                }
                var isJson = false;

                try
                {
                    jToken = JToken.Parse(qs);
                    isJson = jToken is JObject;
                }
                catch
                {
                }
                if (!isJson)
                {
                    jToken = request.Query.ToJToken();
                }
            }

            // 取 jwtToken 优先级顺序:Header → QueryString → Body
            StringValues   jwtToken      = string.Empty;
            IConfiguration configuration =
                (IConfiguration)request
                .HttpContext
                .RequestServices
                .GetService
                (
                    typeof(IConfiguration)
                );
            var jwtTokenName = configuration
                               .GetSection("TokenName")
                               .Value;
            var needExtractJwtToken = !jwtTokenName.IsNullOrEmptyOrWhiteSpace();

            void ExtractJwtTokenInJToken()
            {
                if (needExtractJwtToken)
                {
                    if (jToken != null)
                    {
                        if (StringValues.IsNullOrEmpty(jwtToken))
                        {
                            var j = jToken[jwtTokenName];
                            if (j != null)
                            {
                                jwtToken = j.Value <string>();
                            }
                        }
                    }
                }
            }

            if (needExtractJwtToken)
            {
                request
                .Headers
                .TryGetValue
                (
                    jwtTokenName
                    , out jwtToken
                );
            }
            RequestQueryStringHeaderProcess();
            ExtractJwtTokenInJToken();
            if
            (
                string.Compare(request.Method, "post", true) == 0
            )
            {
                RequestFormBodyProcess();
                ExtractJwtTokenInJToken();
                //if (jToken == null)
                //{
                //    RequestHeaderProcess();
                //}
            }
            if (!StringValues.IsNullOrEmpty(jwtToken))
            {
                request
                .HttpContext
                .Items
                .Add
                (
                    jwtTokenName
                    , jwtToken
                );
            }
            bindingContext
            .Result =
                ModelBindingResult
                .Success
                (
                    jToken
                );
        }