【问题标题】:How to get the current IPrincipal in custom JsonConverter?如何在自定义 JsonConverter 中获取当前的 IPrincipal?
【发布时间】:2016-02-07 13:29:07
【问题描述】:

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

我在this article 中读到IPrincipal 在序列化过程中被重置。

this article 中提供了一个解决方案,我在我的应用程序中实现了该解决方案。

作者没有提到的是如何在 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;
    }
}

【问题讨论】:

    标签: c# asp.net asp.net-web-api json.net iprincipal


    【解决方案1】:

    试试这个

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

    【讨论】:

      最近更新 更多