相关疑难解决方法(0)

ASP.net Web API中MVC的DefaultModelBinder的等价物是什么?

我想在ASP.Net Web API中创建一个自定义模型绑定器.有关如何从头开始执行此操作的大量资源,但我想利用现有功能.

我在codeplex中查看了源代码,可以在那里看到大量的模型绑定器,但大多数是密封的......即使这样,我也无法确定在哪种情况下使用哪一个.

这是我的api方法标题:

public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field)
Run Code Online (Sandbox Code Playgroud)

我想要做的是基本上在填充所有基本属性后拦截模型绑定器,然后根据我将在客户端设置的http请求标头设置一些额外的值.

正如我所说,我很乐意创建自定义模型绑定器和模型绑定器并将它们连接起来,我遇到问题的是试图重用现有的功能.

谢谢,皮特

c# rest model-binding asp.net-web-api

21
推荐指数
1
解决办法
6395
查看次数

WebApi Json.NET自定义日期处理

我已全局明确配置我的MVC4应用程序以使用JSON.NET序列化程序.我知道在序列化日期时我可以选择使用ISO标准日期或旧的Microsoft日期格式.

但是我如何输出我自己的自定义dateTime格式字符串,如:"dd/MM/yyyy hh:mm".

我在插入Json.NET作为默认的序列化程序时可以在MVC3中执行此操作,但似乎无法在MVC4中执行此操作.

到目前为止我在application_start中做过:

  var settings =     GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;            
        JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings()
        {
            Formatting = Formatting.Indented,
            DateTimeZoneHandling = DateTimeZoneHandling.Utc,


        };
        jSettings.Converters.Add(new MyDateTimeConvertor() );
        settings = jSettings;
Run Code Online (Sandbox Code Playgroud)

和我试图暗示的自定义转换器是这样的:

 public class MyDateTimeConvertor : DateTimeConverterBase
    {
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return DateTime.Parse(reader.Value.ToString());
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy hh:mm"));
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激 :)

json.net asp.net-mvc-4 asp.net-web-api

12
推荐指数
1
解决办法
2万
查看次数

Web API ModelBinders - 如何以不同方式绑定对象的一个​​属性

我有以下行动签名

    [ValidateInput(false)]
    public HttpResponseMessage PostParam(Param param)
Run Code Online (Sandbox Code Playgroud)

Param看起来像这样:

public class Param {
  public int Id { get; set;}
  public string Name { get; set; }
  public string Choices { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这就是故障 - 电线上的内容是这样的

{
  Id: 2,
  Name: "blah",
  Choices: [
    {
      foo: "bar"
    },
    {
      blah: "blo"
      something: 123
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我不希望"选择"反序列化 - 我希望它存储为字符串(是的,我理解安全隐患).可以理解,我收到一个错误,因为默认的绑定器不知道这个.

现在使用Asp Mvc创建一个特定的ModelBinder会相当简单.ID

  • 继承DefaultModelBinder
  • 用我自己的方法覆盖属性反序列化
  • 在我的Application_Start使用中设置活页夹Binders.Add

看起来像Web Api这是一个不同的过程 - System.Web.DefaultModelBinder没有任何要覆盖的东西,我无法使用它Binders.Add.我试过环顾四周但却找不到如何实际做我想做的事情.这更加复杂,因为显然ModelBinders api在Beta和RTM上发生了相当大的变化,因此有很多过时的信息.

model-binding asp.net-web-api

6
推荐指数
1
解决办法
3298
查看次数