Pav*_*vel 13 .net f# c#-to-f# asp.net-web-api
我正在使用F#ASP.NET模板将C#webapi项目转换为F#.除了可选的查询参数,一切都很好.我一直收到这个错误
{
"message": "The request is invalid.",
"messageDetail": "The parameters dictionary contains an invalid entry for parameter 'start' for method 'System.Threading.Tasks.Task`1[System.Net.Http.HttpResponseMessage] GetVendorFiles(Int32, System.Nullable`1[System.DateTime])' in 'Thor.WebApi.VendorFilesController'. The dictionary contains a value of type 'System.Reflection.Missing', but the parameter requires a value of type 'System.Nullable`1[System.DateTime]'."
}
Run Code Online (Sandbox Code Playgroud)
F#功能签名:
[<HttpGet; Route("")>]
member x.GetVendorFiles( [<Optional; DefaultParameterValue(100)>] count, [<Optional; DefaultParameterValue(null)>] start : Nullable<DateTime> ) =
Run Code Online (Sandbox Code Playgroud)
C#函数签名:
[HttpGet]
[Route("")]
public async Task<HttpResponseMessage> GetVendorFiles(int count = 100,DateTime? start = null)
Run Code Online (Sandbox Code Playgroud)
有谁知道任何变通方法?
更新:
我找出了这个问题的原因.ASP.NET 使用ParameterInfo提取控制器操作的默认值.显然,F#编译器不会像C#一样编译默认值(即使使用DefaultParameterValueAttribute)
什么是最好的方法或解决这个问题?我需要注入或实现自己的过滤器ParameterBinding吗?
看起来你几乎只能使用变通办法。
使用怎么样:
[<HttpGet; Route("")>]
member x.GetVendorFiles(count: Nullable<int>, start : Nullable<DateTime>) =
let count = count.GetValueOrDefault(100)
// or: let count = if count.HasValue then count.Value else 100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |