如何在MVC WEB API中修剪所有传入的Json对象字段?

时间:2013-10-06 17:46:47

标签: c# asp.net-mvc asp.net-web-api

我想要实现的是修剪MVC Web Api项目中string类型的所有传入对象属性。

我认为模型绑定器应该是一个解决方案,但如果我尝试设置自定义模型绑定器而不是ModelBinders.Binders.DefaultBinder,它就不会被击中..

例如,Json是{"Name": " Test Name ", "Number": 15}

例如 - 如果我明确指定ModelBinder,它就可以工作..

[ModelBinder(typeof(MyCustomBinder))]
    public class TestObject
    {
        public string Name { get; set; }
        public int Number { get; set; }
    }

控制器......

public class TestController : ApiController
{
    // POST api/test
   public void Post([ModelBinder(typeof(MyCustomBinder))]TestObject value)
   {
   }

注册

 ModelBinders.Binders.Add(new KeyValuePair<Type, IModelBinder>(typeof(TestObject), new MyCustomBinder()));

但是我想找到更通用的方法,所以我不需要在项目中装饰每个模型类

1 个答案:

答案 0 :(得分:0)

我相信,如果您的客户端代码发送的内容与" Test Name "之类的内容有空白,那么用户可能实际上希望它是那样的。但是,如果您参加的是以一种困难的方式阻止他这样做,而不是处理前端的<input type='text' .. />,那么您最终可能会访问请求的Form集合。

public ViewResult Index()
{
    Request.Form["Name"] = Request.Form["Name"].Trim();

    return View();
}

或者,您可以通过其他几种方式来实现:

  • 您可以创建一个常见的asbtract控制器类,它将在OnActionExecuting方法中执行相同的操作。
  • 您可以定义一个ActionFilter属性类,无论您使用它标记哪种方法或控制器类,都可以执行此操作。

由于您使用的是限量版控制器,您仍然可以访问Request属性:

HttpRequestBase request = ((HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request;