ASP.NET и C #: где вы храните URL-адрес остальных клиентов? - PullRequest
3 голосов
/ 05 ноября 2019

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

Visual Studio 2019 теперь жалуется, потому что мой URL-адрес клиента отдыха имеет недопустимый знак = как токен в самом URL-адресе, и вместо этого он ожидает ; как токен.

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

Невозможно предоставить полный URL-адрес, но часть, которая выделена как ошибка, выглядит следующим образом: version=2.0&details=true.

Ответы [ 3 ]

6 голосов
/ 05 ноября 2019

Я нашел ответ. Проблема в самом символе &. После преобразования в & ошибки, которые выделяла Visual Studio, исчезли, и мое решение снова заработало.

2 голосов
/ 05 ноября 2019

Если я сделаю это, я сохраню в конфигурационном файле только базовый URL-адрес, как это

  "WebConfig": {
    "SmsCenterApi": "https://some_site.com/SendService"
  }

, и в коде я могу завершить ссылку

string url = WebConficData.SmsCenterApi+"version=2.0&details=true";

, и после этого я смогу использоватьURL, чтобы сделать запрос. Для нескольких сред web.config и appsettings очень полезны. Вы просто меняете базовый URL для каждого env и все.

1 голос
/ 05 ноября 2019

Я думаю, что ответ на ваши вопросы

где вы храните URL-адрес остального клиента?

Правильно ли перенести URL-адрес остальных в файл конфигурации?

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

Таким образом, мы можем в основном (для полноты) разделить URL-адрес конечной точки отдыха на две части, которые могут повлиять на нашу реализацию.

Базовый URL-адрес:

"https://www.some-nice-name.com/SomeEndPoint"

и параметры

?key1=value1&key2=value2

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

{
    "BaseUrl" : "https://www.some-nice-name.com/SomeEndPoint",
    "UrlParams" : "?key1=value1&key2=value2"
}

Или в одном узле / атрибуте, или даже разбить каждую отдельную пару параметров ("key1 = value1") на собственные поля. И так далее, и так далее ......

В любом случае, если мы сейчас перейдем к нашему C # -коду и реализуем вызов Rest, у нас будет широкий спектр различных возможных решений. В этом примере я покажу вам, как использовать пакет RestSharp NuGet и почему он может повлиять на наше решение по вышеуказанному вопросу.

Итак, один базовый пример:

// I will not show the implementation of ReadYourConfigStuff() because its fairly clear what should happen here
var config = ReadYourConfigStuff(); 

// Give the BaseUrl to our REST client
var restClient = new RestClient(config.BaseUrl);

// Just taking GET as we have some GET Parameters
var restRequest = new RestRequest(Method.GET); 

пока все хорошо,Но мы все еще скучаем по нашим параметрам, верно? Давайте продолжим:

// RestSharp gives us a very nice tool to add GET parameters to our request
restRequest.AddParameter("key1", "value1");
restRequest.AddParameter("key2", "value2");

Это выглядит совсем не так, как мы добавили в наш конфигурационный файл, не так ли? Да. Поскольку RestSharp предоставляет нам инструмент под рукой, который позволяет добавлять параметры один за другим, мы можем сами выбирать, как хранить и поддерживать их в нашем коде. И если мы посмотрим на определение AddParameter

public IRestRequest AddParameter(string name, object value);

, то увидим, что вторым параметром может быть любой объект. Удивительно!

Итак, мой ответ на ваш вопрос: да, вы можете сохранить его в файле конфигурации, но подходит ли он для вашей реализации? Параметры зафиксированы или они меняются? Как ваш любимый инструментарий хотел бы, чтобы вы реализовали запрос на отдых?

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

...