Методы:
#region Основные
/// <summary>
/// Вход/Авторизация.
/// </summary>
/// <param name="userName">Имя.</param>
/// <param name="password">Пароль.</param>
/// <returns></returns>
[AcceptVerbs("POST")]
public HttpStatus Login(string userName, string password)
{
Если на сервисе включена Forms авторизация, то
для вызова защищенных атрибутом [ApiAccess] методов, необходимо пройти процедуру авторизации.
При удачной проверке имени пользователя и пароля, возвращается зашифрованная кука, которая должна
в последующем передаваться на сервер при каждом вызове защищенного метода сервиса.
Если проверка не прошла, возвращается статус (403) Forbidden.
Так же поддерживается Basic авторизация, при которой параметры авторизации передаются с каждым запросом
в заголовке Authorization в формате «Basic userName:password», где строка userName:password закодирована в Base64.
Если проверка не прошла, то возвращается статус (401) Unauthorized.
}
/// <summary>
/// Выход.
/// </summary>
[AcceptVerbs("GET","POST")]
public void Logout()
{
Удаляется кука авторизации.
}
/// <summary>
/// Дата/Время на сервере.
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public DateTime GetServerDateTime()
{
Возвращается Дата/Время сервера в ISO формате.
}
/// <summary>
/// Версия сервиса.
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public string GetServiceVersion()
{ }
/// <summary>
/// Максимально допустимый размер загружаемого на сервер файла (байт).
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public long MaxUploadFileSize()
{ }
#endregion
#region File
/// <summary>
/// Проверка существования файла.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public bool FileExist(string fileLink)
{ }
/// <summary>
/// Получить информацию о файле.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="calcChecksum">Вычислить контрольную сумму.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public TransferFileInfo GetFileInfo(string fileLink, bool? calcChecksum)
{ }
/// <summary>
/// Загрузить файл на сервер.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="rewrite">Перезаписывать файл.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[SecureAccess]
public string UploadFile(string prefix, bool? rewrite)
{
Возвращается ссылка на файл.
Вызов метода всегда защищен, т.е. всегда необходима авторизация (Forms или Basic) вне зависимости от настроек.
}
/// <summary>
/// Скачать файл с сервера.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <returns>Content-Type: application/octet-stream</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Stream DownloadFile(string fileLink)
{ }
#endregion
#region Thumbnail
/// <summary>
/// Получить миниатюру.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Thumbnail GetThumbnail(string fileLink)
{ }
/// <summary>
/// Подробный список версий.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="thumbSize">Размер миниатюры.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Thumbnail GenerateThumbnail(string fileLink, int? thumbSize)
{
Если размер миниатюры не передан (thumbSize == null), то берется размер заданный в файле конфигурации.
}
/// <summary>
/// Информация о версии.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="version">Версия.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public bool SaveThumbnail(string fileLink)
{
Если файл по ссылке не существует, то сохранение не выполняется.
}
#endregion
#region WinCrypto
/// <summary>
/// Вычислить хэш файла.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="hashAlgOid">Алгоритм: 1.2.643.2.2.9 для ГОСТ R 34.11-94 | 1.3.14.3.2.26 для SHA-1.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public string GetFileHash(string fileLink, string hashAlgOid)
{
Пример GET запроса:
http://localhost/UploadService/uploadservice.ashx/GetFileHash?fileLink=UPLOADS\2013\YM\20150921\e836cc3abd22c03d1d10a01725761999_90MByte.pdf&hashAlgOid=1.3.14.3.2.26
Пример POST запроса:
http://localhost/UploadService/uploadservice.ashx/GetFileHash
Content-Type: application/x-www-form-urlencoded
fileLink=UPLOADS\2013\YM\20150921\e836cc3abd22c03d1d10a01725761999_90MByte.pdf&hashAlgOid=1.3.14.3.2.26
}
/// <summary>
/// Проверить подпись файла.
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="signLink">Файл сигнатуры.</param>
/// <param name="checkParams">Параметры проверки.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("POST")]
public IDictionary<string,string> CheckFileSign(string fileLink, string signLink, IDictionary<string,string> checkParams))
{
Параметры fileLink и signLink передаются в строке запроса в виде Url-кодированных строк.
Параметр checkParams передается в теле запроса в виде Json строки с Content-Type: application/json.
Если параметр signLink == null, т.е. не передан, то сигнатура в явном виде должна содержаться в checkParams.
}
/// <;t;summary>
/// Проверить подпись данных.
/// </summary>
/// <param name="checkParams">Параметры проверки.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("POST")]
public IDictionary<string,string> CheckDataSign(IDictionary<string,string> checkParams)
{ }
#endregion
Структуры данных:
// "Информация о файле"
class TransferFileInfo
{
FileAttributes Attributes; // Атрибуты файла.
string Checksum; // Контрольная сумма файла.
DateTime CreationTime; // Время создания файла.
string FileName; // Имя файла или путь к файлу или ссылка на файл.
DateTime LastAccessTime; // Время последнего обращения к файлу.
DateTime LastWriteTime; // Время последней модификации файла.
bool LoadCompleted; // Файл загружен полностью.
long Size; // Размер файла.
Version Version; // Версия файла.
}
// "Миниатюра"
class Thumbnail
{
int FileSize; // Размер файла картинки (байт).
int Height; // Высока (пикселей).
float HorizontalResolution; // Горизонтальное разрешение.
string Name; // Имя.
PixelFormat PixelFormat; // Формат цвета пикселей.
ImageRawFormat RawFormat; // Формат изображения.
byte[] ThumbImage; // Содержимое картинки.
float VerticalResolution; // Вертикальное разрешение.
int Width; // Ширина (пикселей).
}
// "Параметры проверки подписи"
IDictionary<string,string>
{
stringing CertUsageOids;
bool CheckRevocation;
string NeedServiceVersion;
int SecretKeyValidity;
int UrlRetrievalTimeout;
string ValidationTime; // Формат: "yyyy-MM-dd HH:mm:ss"
}
// "Результат проверки подписи"
IDictionary<string,string>
{
stringing CadesMessage;
byte[] Certificate;
string ChainMessage;
uint ErrorCadesCode;
uint ErrorChainCode;
uint ErrorMathCode;
string ExtendedInfo;
string Fio;
bool IsCadesValid;
bool IsChainValid;
bool IsMathValid;
string Issuer;
string IssuerX500;
string MathMessage;
string Message;
string OrganizationName;
string Serial;
string Subject;
string SubjectX500;
string Version;
}