Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在自定义JsonConverter中获取当前IPrincipal?_C#_Asp.net_Asp.net Web Api_Json.net_Iprincipal - Fatal编程技术网

C# 如何在自定义JsonConverter中获取当前IPrincipal?

C# 如何在自定义JsonConverter中获取当前IPrincipal?,c#,asp.net,asp.net-web-api,json.net,iprincipal,C#,Asp.net,Asp.net Web Api,Json.net,Iprincipal,在我的ASP.NET Web API应用程序中,我正在构建一个自定义的JsonConverter,以使用登录用户的偏移量将Json对象中的任何DateTime字符串转换为DateTimeOffset 我已经了解到,IPrincipal正在序列化过程中重置 中提供了一个解决方案,我在应用程序中实现了该解决方案 作者没有提到的是如何在JsonConverter的ReadJson()方法中实际检索IPrincipal 所以我现在被困在这里 internal class CustomDateTimeOf

在我的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;
    }
}
试试这个

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

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