如何在自定义JsonConverter中获取当前的IPrincipal

本文关键字:IPrincipal 获取 自定义 JsonConverter | 更新日期: 2023-09-27 18:21:02

在我的ASP.NET Web API应用程序中,我正在构建一个自定义JsonConverter,以使用登录用户的偏移量将Json对象中的任何DateTime字符串转换为DateTimeOffset

我在本文中读到IPrincipal在序列化过程中被重置。

本文提供了一个解决方案,我在应用程序中实现了它。

作者没有提到的是如何在JsonConverter的ReadJson()方法中实际检索IPrincipal

所以我现在被困在这里。

internal class CustomDateTimeOffsetConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, 
                                    object value, 
                                    JsonSerializer serializer)
    {
        if (value is DateTimeOffset)
        {
            var date = (DateTimeOffset)value;
            value = date.LocalDateTime;
        }
        serializer.Serialize(writer, value);
    }
    public override object ReadJson(JsonReader reader, 
                                    Type objectType, 
                                    object existingValue, 
                                    JsonSerializer serializer)
    {
        if (existingValue is DateTimeOffset)
        {
            // How to get the current logged in IPrincipal?
            // var user =  ...
        }
    }
    public override bool CanConvert(Type objectType)
    {
        return true;
    }
}

如何在自定义JsonConverter中获取当前的IPrincipal

试试这个

var requestContext = System.Web.DynamicData.DynamicDataRouteHandler.GetRequestContext(System.Web.HttpContext.Current);
var user = requestContext.HttpContext.User;