【发布时间】:2022-02-07 01:41:08
【问题描述】:
我有以下代码可以发布到 web api。
[<CLIMutable>]
type MyModel = { FileName:string; Period:DateTime; DownloadedTime:DateTimeOffset; Url:string; }
let PostDownload (filepath, date, url) =
async {
try
use client = new HttpClient()
let content = { FileName = filepath; Period = date; DownloadedTime = DateTimeOffset.Now; Url = url }
let! response = Async.AwaitTask(client.PostAsJsonAsync("http://localhost:5000/api/DownloadedFiles", content))
with
| ex -> logger.Error(ex, "Exception: " + ex.Message)
} |> Async.Start
该服务具有以下代码,调试器显示downloadedFile 的所有字段都是默认值(空值或值类型的最小值)。
[HttpPost]
public void Post([FromBody]DownloadedFile downloadedFile)
{
try
{
_context.DownloadedFile.Add(downloadedFile);
_context.SaveChanges();
}
catch (Exception ex) { ...... }
}
fiddler 显示 F# 代码(或者 PostAsJsonAsync 无法处理 F# 可变记录类型?)在字段名称末尾添加了 @?
{"FileName@":"test","Period@":"2100-01-01T00:00:00","DownloadedTime@":"2016-08-18T15:50:37.5004391-04:00" ,"Url@":"测试"}
【问题讨论】:
-
马克的例子值得一看。这是一个“默认的 HttpClient JSON 序列化器不是很好”的问题,而不是 F# 问题。
-
作为 HttpClient 的替代方案,您可以查看 FSharp.Data...
-
你可以看看github.com/haf/Http.fs,它是用 F# 编写的,并且还有很多用于发布文件的测试用例。
标签: c# asp.net-web-api f# webclient