如何将发布值传递到webapi .net核心

时间:2020-01-14 13:24:05

标签: c# asp.net-core

我想将datetime发布到下面的api中。但这并没有完成。

lastRefreshDateTime.Result是日期时间

下面是我尝试的代码:

await client.PostAsync($"{_printApiUrl}pdf/GenerateAndEmailZipOfPDFs/${lastRefreshDateTime.Result}", content, cancellationToken);



 [Authorize]
    [Route("api/pdf/GenerateAndEmailZipOfPDFs/{lastRefreshDateTime}")]
    public void GenerateAndEmailZipOfPDFs([FromBody]List<UrlObject> urls,DateTime lastRefreshDateTime)

1 个答案:

答案 0 :(得分:2)

您很可能在异步函数中混入.Result之类的阻塞调用而遇到死锁。

您需要使用await

var lastRefreshDateTime = await _contentManagement.GetLastRefreshDateTime(cancellationToken);

参考Async/Await - Best Practices in Asynchronous Programming

还要注意如何使用$ - string interpolation

生成URI。
var uri = $"{_printApiUrl}pdf/GenerateAndEmailZipOfPDFs/{lastRefreshDateTime}";
await client.PostAsync(uri, content, cancellationToken);

显示的URI中有一个错误的$,导致发布后的日期时间格式错误。

还应该考虑使用路线约束

[Authorize]
[Route("api/pdf/GenerateAndEmailZipOfPDFs/{lastRefreshDateTime:datetime}")]
public void GenerateAndEmailZipOfPDFs(
    [FromBody]List<UrlObject> urls, 
    [FromRoute]DateTime lastRefreshDateTime
)

参考Routing to controller actions in ASP.NET Core

参考Routing in ASP.NET Core