KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am having a lot of trouble getting custom model binding to work when posting x-www-form-urlencoded data. I've tried every way I can think of and nothing seems to produce the desired result. Note when posting JSON data, my JsonConverters and so forth all work just fine. It's when I post as x-www-form-urlencoded that the system can't seem to figure out how to bind my model. My test case is that I'd like to bind a TimeZoneInfo object as part of my model. Here's my model binder: public class TimeZoneModelBinder : SystemizerModelBinder { protected override object BindModel(string attemptedValue, Action<string> addModelError) { try { return TimeZoneInfo.FindSystemTimeZoneById(attemptedValue); } catch(TimeZoneNotFoundException) { addModelError("The value was not a valid time zone ID. See the GetSupportedTimeZones Api call for a list of valid time zone IDs."); return null; } } } Here's the base class I'm using: public abstract class SystemizerModelBinder : IModelBinder { public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { var name = GetModelName(bindingContext.ModelName); var valueProviderResult = bindingContext.ValueProvider.GetValue(name); if(valueProviderResult == null || string.IsNullOrWhiteSpace(valueProviderResult.AttemptedValue)) return false; var success = true; var value = BindModel(valueProviderResult.AttemptedValue, s => { success = false; bindingContext.ModelState.AddModelError(name, s); }); bindingContext.Model = value; bindingContext.ModelState.SetModelValue(name, new System.Web.Http.ValueProviders.ValueProviderResult(value, valueProviderResult.AttemptedValue, valueProviderResult.Culture)); return s
Tags (comma-separated)
Save Edits
Cancel