Обратная косая черта не распознается как параметр в WebGet - PullRequest
0 голосов
/ 22 октября 2019

Код:

[OperationContract]
[WebGet(UriTemplate = "ProgrammerData/Document/{*documentName}")]
string ProgrammerDataDocument(string documentName);

Вызов:

call Текст изображения: localhost/RedactedPath/ProgrammerData/Document/%5C%5Cxundas

Результат

enter image description here Текст изображения:

public string ProgrammerDataDocument(string documentName)
{
  // value of documentName at this point is "xundas"
  string a = "";
  return a;
}

Обратная косая черта, которую я кодировал, но не отображается в моем параметре.

Мне это нужно, потому что я отправляю сетевой путь со своей клиентской сторонымой сервер

Ответы [ 2 ]

1 голос
/ 23 октября 2019

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

[OperationContract]
        [WebGet(UriTemplate ="abc/{*value}")]
        string GetData(string value);


    public string GetData(string value)
            {
                var result = System.Net.WebUtility.UrlDecode(value);
                result = result.Replace("/", @"\\");
                return result;
            }

Результат.
enter image description here
Об UriTemplate.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/uritemplate-and-uritemplatetable?redirectedfrom=MSDN
Не стесняйтесь, дайте мнезнаю, могу ли я чем-нибудь помочь.

0 голосов
/ 22 октября 2019

Обратная косая черта не допускается в имени ресурса URL (браузеры просто конвертируют их в прямую косую черту);они допускаются только как закодированное значение параметра запроса.

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

[OperationContract]
[WebGet(UriTemplate = "ProgrammerData/Document/{docDomain}{docName}")]
string ProgrammerDataDocument(string docDomain, string docName);

Возможно, вы захотите добавитькосая черта в качестве разделителя между частью домена / UNC (которая пуста, поэтому в основном ., т.е. local в вашем примере) и именем документа, которое имеет смысл с иерархической точки зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...