Примеры Valhalla API¶
Пример (PowerShell): связывание задач при win-аутентификации:
$versionTaskId = 123456 #номер задачи для связывания
cd C:\\Source\\1f #путь к репозиторию
$log = git shortlog 2.109..origin/master #получение списка коммитов
$cred = Get-Credential #запрос учетных данных для аутентификации
ForEach ($line in $log)
{
if($line)
{
$lineTrimmed = $line.Trim(); #получение номера задачи из коммита
if ($lineTrimmed\[1\ -match \'\0-9\\')]
{
if ($lineTrimmed\[0\ -match \'\0-9\\')]
{
$lineTrimmed = $lineTrimmed.SubString(0,6);
}
else
{
$lineTrimmed = $lineTrimmed.SubString(1,7);
}
$url = "http://web-server.1forma.ru/app/v1.0/api/subtasks/"+$versionTaskId+"/link/" + $lineTrimmed; #где web-server.1forma.ru — адрес веб-сервера приложения "Первая Форма"
write-host $url
Invoke-WebRequest -Method POST -Uri $url -Credential $cred #вызов веб метода для связывания задач
}
}
}
ℹ️ [ В примере используются библиотеки JsonRules.dll и FirstFormJsonObjects.dll]
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; namespace TCClassLib.Test.ReadOnly.JsonStructureTest { public class JsonStructureTest { static FFClient client = null; static FFClient Client { get { if (client == null) { client = new FFClient(Settings.FFUrl); client.Login(Settings.FFLogin, Settings.FFPassword); } return client; } } public void GetMyChats_Call() { var jChats = Client.Post(DataService.GetMyChats, JObject.Parse("{\\"openedChatId\\":null}")); new FirstFormJsonObjects.Responses.Chats().Check(jChats); } } public class FFClient { public string BaseFFUrl { get; private set; } CookieCollection cookies = new CookieCollection(); public FFClient(string baseFFUrl) { BaseFFUrl = baseFFUrl; } public JObject Login(string login, string password) { var url = "iOSClientServices/Auth.ashx"; var content = new FormUrlEncodedContent(new Dictionary \< string, string \> { { "UserName", login }, { "Pass", password } }); var result = PostRequestHelper \< string \> (url, content, async response =\> { string res = await response.Content.ReadAsStringAsync(); return res; }).Result; bool isError = false; try { new FirstFormJsonObjects.Responses.AuthError().Check(result); isError = true; } catch (JsonRules.RuleException) {} if (isError) { throw new Exception(result.ToString()); } return result; } public JObject Post(string url, object pars) { var result = PostRequestHelper \< string \> (url, pars, async response =\> { string res = await response.Content.ReadAsStringAsync(); return res; }).Result; return result; } string RemoveAspNetDProperty(string response) { if (!string.IsNullOrWhiteSpace(response)) { const string dPropertyPrefix = "{\\"d\\":"; if (response.StartsWith(dPropertyPrefix)) { response = response.Substring(dPropertyPrefix.Length, response.Length — dPropertyPrefix.Length — 1); } } return response; } async Task \< JObject \> PostRequestHelper \< T \> (string requestUri, object content, Func \< HttpResponseMessage, Task \< T \>\> handleResult) { var handler = new HttpClientHandler(); handler.CookieContainer = new CookieContainer(); using(handler) { using(var client = new HttpClient(handler)) { client.BaseAddress = new Uri(BaseFFUrl); if (cookies != null) { handler.CookieContainer.Add(client.BaseAddress, cookies); } client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = null; if (content is HttpContent) { response = await client.PostAsync(requestUri, (HttpContent) content); } else { response = await client.PostAsJsonAsync(requestUri, content); } cookies = handler.CookieContainer.GetCookies(client.BaseAddress); if (response.IsSuccessStatusCode) { string res = await response.Content.ReadAsStringAsync(); res = RemoveAspNetDProperty(res); return JObject.Parse(res); } else { string res = await response.Content.ReadAsStringAsync(); throw new Exception(res); } } } } } }