gpt4 book ai didi

c# - 用 APIController 补充 [FromUri] 序列化

转载 作者:可可西里 更新时间:2023-11-01 15:28:55 26 4
gpt4 key购买 nike

我们有多个 API Controller 接受 GET 请求,如下所示:

//FooController
public IHttpActionResult Get([FromUri]Foo f);
//BarController
public IHttpActionResult Get([FromUri]Bar b);

现在 - 我们希望(或被迫)更改 GET 查询字符串中的 DateTime 字符串格式 globally

"yyyy-MM-ddTHH:mm:ss" -> "yyyy-MM-ddTHH.mm.ss"

更改后,所有包含 DateTime 类型的类的 [FromUri] 序列化都会失败。

有没有办法补充 [FromUri] 序列化以在查询字符串中接受 DateTime 格式?或者我们是否必须为所有 API 参数构建自定义序列化以支持新的 DateTime 字符串格式?

编辑:请求的例子

public class Foo {
public DateTime time {get; set;}
}

//FooController. Let's say route is api/foo
public IHttpActionResult Get([FromUri]Foo f);

GET api/foo?time=2017-01-01T12.00.00

最佳答案

要在所有模型的所有 DateTime 类型中应用您想要的这种行为,那么您需要编写 custom binder for the DateTime type and apply it globally .

日期时间模型绑定(bind)器

public class MyDateTimeModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType != typeof(DateTime))
return false;

var time = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

if (time == null)
bindingContext.Model = default(DateTime);
else
bindingContext.Model = DateTime.Parse(time.AttemptedValue.Replace(".", ":"));

return true;
}
}

WebAPI 配置

config.BindParameter(typeof(DateTime), new MyDateTimeModelBinder());

关于c# - 用 APIController 补充 [FromUri] 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42020282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com