下面的代码为我尝试在新的 ASP.NET Core 3.0 API 项目中创建的某些扩展复制错误。
using ClassLibrary1;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace WebApplication1
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureAppConfiguration((context, config) =>
{
// this works fine
var env = context.HostingEnvironment;
});
webBuilder.CustomConfigureAppConfiguration();
})
.ConfigureAppConfiguration((context, config) =>
{
// this works fine
var env = context.HostingEnvironment;
})
.CustomConfigureAppConfiguration();
}
}
Run Code Online (Sandbox Code Playgroud)
这个Extensions类需要在不同的项目中。在同一个主项目中似乎工作正常。
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
// This project can …Run Code Online (Sandbox Code Playgroud) 我注意到,DateTime对于QueryString和Body之间的相同值,对象的序列化方式不同。基础值仍然是相同的正确值,但是序列化的QueryString具有DateTimeKindof Local,而Body是Utc。
[HttpPost]
public ActionResult Post([FromQuery] DateTime queryDate, [FromBody] DateTime bodyDate)
{
var result = new
{
queryDateKind = queryDate.Kind.ToString(),
bodyDateKind = bodyDate.Kind.ToString()
};
return new ObjectResult(result);
}
Run Code Online (Sandbox Code Playgroud)
POST /api/values?queryDate=2019-05-12T00%3A00%3A00.000Z HTTP/1.1
Host: localhost:5000
Content-Type: application/json
cache-control: no-cache
"2019-05-12T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
{
"queryDateKind": "Local",
"bodyDateKind": "Utc"
}
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?是否有可能始终序列化为相同的设置DateTimeKind?
最好我不想使用ToUniversalTime()或ToLocalTime()无处不在,也没有使用任何自定义IModelBinder。