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"]); }
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); }
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); }
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; } } } }
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 ); }