Методы:
#region Основные
/// <summary>
/// Вход/Авторизация: "uploadservice.ashx/Login"
///
</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>
/// Выход: "uploadservice.ashx/Logout"
///
</summary>
[AcceptVerbs("GET","POST")]
public void Logout()
{
Удаляется кука авторизации.
}
///
<summary>
/// Дата/Время на сервере: "uploadservice.ashx/GetServerDateTime"
///
</summary>
///
<returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public DateTime
GetServerDateTime()
{
Возвращается Дата/Время сервера в ISO формате.
}
///
<summary>
/// Тип хранилища: "uploadservice.ashx/GetStorageType"
///
</summary>
///
<returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public string GetStorageType()
{ }
///
<summary>
/// Версия сервиса: "uploadservice.ashx/GetServiceVersion"
///
</summary>
///
<returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public string GetServiceVersion()
{ }
///
<summary>
/// Максимально допустимый размер загружаемого на сервер файла (байт): "uploadservice.ashx/MaxUploadFileSize"
///
</summary>
///
<returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public long MaxUploadFileSize()
{ }
#endregion
#region File
///
<summary>
/// Проверка существования файла: "uploadservice.ashx/FileExist"
///
</summary>
/// <param name="fileLink">Ссылка на файл.</param>
///
<returns>Content-Type: application/json</returns>
[AcceptVerbs("GET","POST")]
[ApiAccess]
public bool FileExist(string fileLink)
{ }
///
<summary>
/// Получить информацию о файле: "uploadservice.ashx/GetFileInfo"
///
</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>
/// Загрузить файл на сервер: "uploadservice.ashx/UploadFile"
///
</summary>
/// <param name="filePrefix">Префикс пути файла.</param>
/// <param
name="fileInfo">Параметры файла.</param>
/// <param name="rewrite">Перезаписывать файл.</param>
/// <param name="draft">Черновик.</param>
///
<returns>Content-Type: application/json</returns>
[AcceptVerbs("POST")]
[ApiAccess]
public string UploadFile(string filePrefix, TransferFileInfo fileInfo, bool rewrite, bool draft)
{
Возвращается ссылка на файл.
Параметры метода передаются в строке запроса в виде: ?filePrefix= &fileInfo.FileName= &fileInfo.Checksum=
&fileInfo.Size= &rewrite= &draft=
Содержимое файла передается в теле запроса.
}
/// <summary>
/// Сохранить
черновик в беловик: "uploadservice.ashx/SaveDraftFile"
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
/// <param name="rewite">Перезаписать, если
файл уже существует.</param>
/// <returns>Content-Type:
application/octet-stream</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public string SaveDraftFile (string fileLink, bool rewrite)
{
Возвращается новая ссылка на файл.
}
///
<summary>
/// Скачать файл с сервера: "uploadservice.ashx/DownloadFile"
///
</summary>
/// <param name="fileLink">Ссылка на файл.</param>
///
<returns>Content-Type: application/octet-stream</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Stream DownloadFile(string fileLink)
{ }
///
<summary>
/// Скачать файл с сервера: "uploadservice.ashx/ViewFile"
///
</summary>
/// <param name="fileLink">Ссылка на файл.</param>
///
<returns>Content-Type: application/octet-stream</returns>
[AcceptVerbs("GET")]
[ViewAccess]
public Stream ViewFile(string fileLink)
{
ViewAccess – специальный атрибут, позволяющий просмотреть файл в браузере
без авторизации, если логин и пароль пользователя в конфиг.файле
сервиса не заданы.
}
/// <summary>
/// Удалить
файл на сервере: "uploadservice.ashx/DeleteFile"
/// </summary>
/// <param name="fileLink">Ссылка на файл.</param>
[AcceptVerbs("DELETE", "POST")]
[ApiAccess]
public void DeleteFile(string fileLink)
{ }
#endregion
#region Crypto
///
<summary>
/// Вычислить хэш файла: "uploadservice.ashx/GetFileHash"
///
</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>
/// Проверить подпись файла: "uploadservice.ashx/CheckFileSign"
/// </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>
/// Проверить подпись данных: "uploadservice.ashx/CheckDataSign"
/// </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;
// Версия файла.
}
// "Параметры проверки подписи"
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;
}