Для определения аутентификации в спецификации OpenAPI 2.0 используются два ключевых слова:
securityDefinitions
security
securityDefinitions
описывает безопасность type (например, Basic, API-ключ и т. д.), и security
применяет его ко всем или отдельным операциям. Без security
, securityDefinitions
не имеет никакого эффекта.
Если все операции используют базовую аутентификацию, примените security
на корневом уровне:
{
"swagger": "2.0",
"securityDefinitions": {
"basicAuth": {
"type": "basic"
}
},
"security": [
{
"basicAuth": []
}
],
...
}
Если в конкретной операции используется базовая аутентификация, примените security
к этой конкретной операции:
[111 ]
Дополнительная информация: Базовая аутентификация (OpenAPI 2.0)
Для Ваших требований я вижу две опции:
(1) Удалите начальный символ префикса, если существующий.
(2) Используйте полное регулярное выражение для разделения строки.
Оба проиллюстрированы в этом коде:
using System;
using System.Linq;
using System.Text.RegularExpressions;
class APP { static void Main() {
string s = "~Peter~Lois~Chris~Meg~Stewie";
// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }
// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }
// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
.OfType<Match>()
.ToList()
.ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
;
}}
Регулярное выражение в № 2 соответствует символу-разделителю, сопровождаемому группой соответствия, содержащей нуль или больше несимволов-разделителей. Результирующие соответствия являются разграниченными строками (включая любые пустые строки). Для каждого соответствия, "соответствие. Значение" является всей строкой включая ведущий разделитель и "соответствие. Groups1. Значение" является первой группой соответствия, содержащей произвольную строку разделителя.
Для полноты третье кодирование (#3) включено, показав тот же метод регулярного выражения в № 2, но в стиле кодирования LINQ.
Если Вы боретесь с регулярными выражениями, я настоятельно рекомендую Регулярные выражения Освоения, Третий Выпуск Jeffrey E. F. Friedl. Это - безусловно, лучшая помощь пониманию регулярных выражений и позже служит превосходной ссылкой или напоминанием по мере необходимости.
В C# это, кажется, получает то, что Вы хотите:
"~Peter~Lois~Chris~Meg~Stewie".Split("~".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Вот подход LINQ...
Отметьте с RegexOptions. ExplicitCapture соответствия не включены. Без него '~' будет включен также.
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string s = "~Peter~Lois~Chris~Meg~Stewie";
Regex.Split(s, "(~)", RegexOptions.ExplicitCapture)
.Where(i=>!String.IsNullOrEmpty(i))
.ToList().ForEach(i => Console.WriteLine(i));
Console.ReadLine();
}
}
}