Поддержка объекта запроса OIDC IdentityServer4

Я начну с ответа на копию Ben Gripka:

public void Save(string FileName)
{
    using (var writer = new System.IO.StreamWriter(FileName))
    {
        var serializer = new XmlSerializer(this.GetType());
        serializer.Serialize(writer, this);
        writer.Flush();
    }
}

Я использовал этот код раньше. Но реальность показала, что это решение немного проблематично. Обычно большинство программистов просто сериализуют настройки при сохранении и десериализации настроек при загрузке. Это оптимистический сценарий. Как только сериализация завершилась неудачно, по какой-то причине файл частично написан, файл XML не является полным и недействителен. В результате десериализация XML не работает, и ваше приложение может сработать при запуске. Если файл не огромен, я предлагаю сначала сериализовать объект в MemoryStream, а затем записать поток в файл. Этот случай особенно важен, если есть некоторая сложная пользовательская сериализация. Вы никогда не сможете проверить все случаи.

public void Save(string fileName)
{
    //first serialize the object to memory stream,
    //in case of exception, the original file is not corrupted
    using (MemoryStream ms = new MemoryStream())
    {
        var writer = new System.IO.StreamWriter(ms);    
        var serializer = new XmlSerializer(this.GetType());
        serializer.Serialize(writer, this);
        writer.Flush();

        //if the serialization succeed, rewrite the file.
        File.WriteAllBytes(fileName, ms.ToArray());
    }
}

Дезериализация в сценарии реального мира должна рассчитываться с поврежденным файлом сериализации, это происходит когда-то. Функция загрузки, предоставленная Бен Грипкой, прекрасна.

public static [ObjectType] Load(string fileName)
{
    using (var stream = System.IO.File.OpenRead(fileName))
    {
        var serializer = new XmlSerializer(typeof([ObjectType]));
        return serializer.Deserialize(stream) as [ObjectType];        
    }    
}

И это может быть обернуто некоторым сценарием восстановления. Он подходит для файлов настроек или других файлов, которые могут быть удалены в случае возникновения проблем.

public static [ObjectType] LoadWithRecovery(string fileName)
{
    try
    {
        return Load(fileName);
    }
    catch(Excetion)
    {
        File.Delete(fileName); //delete corrupted settings file
        return GetFactorySettings();
    }
}
0
задан acarlon 5 March 2019 в 04:19
поделиться

1 ответ

Ответ заключается в том, что на github IdentityServer4 уже имеется запрос функции.

Итак, IdentityServer4 в настоящее время не поддерживает объект запроса (подписанный запрос).

0
ответ дан acarlon 5 March 2019 в 04:19
поделиться