Не найдено 404 при доступе к службе WCF Rest (WebGet), когда сегмент URL-адреса представляет собой строку json

В моем проекте я должен передать динамическую строку Json веб-службе WCF Rest.

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

http://localhost:58014/MyService.svc/api/queries/somestirng

но когда я передаю строку json в качестве сегмента URL, не найдена ошибка.

{"Ключ":"UserHomePageInfoQuery","Сообщение":"{\"UserName\":\"usr83\"}"}

http://localhost:58014/MyService.svc/api/queries/257b%2522Key%2522%253a%2522UserHomePageInfoQuery%2522%252c%2522Message%2522%253a%2522%257b%255c%2522UserName%255c%2522%253a%255c%2522usr83%255c%2522%257d%2522%257d

Вот мое определение контракта на обслуживание

    [OperationContract]
    [WebGet(UriTemplate = "api/queries/{queryString}",                        
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    Response Query(string queryString);

Я знаю, что могу использовать POST, но все запросы к обслуживанию — это запросы

У меня есть другой сервис для команд по POST

[OperationContract]
        [WebInvoke(UriTemplate = "api/commands/",
            Method = "POST",            
            RequestFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
            ResponseFormat = WebMessageFormat.Json)]       
        Response Execute(Request request)

person ozman    schedule 18.06.2016    source источник
comment
Обязательно ли это должен быть GET? Вы можете просто отправить строку JSON.   -  person khlr    schedule 18.06.2016
comment
Да, потому что через этот сервис проходят только операции запросов. у меня есть другой сервис для команд в качестве поста   -  person ozman    schedule 18.06.2016
comment
Нельзя ли тоже поменять WebGet на WebInvoke? Или требуется, чтобы этот метод принимал только GET?   -  person khlr    schedule 18.06.2016
comment
да. Он должен принимать только GET. Я редактирую вопрос для ясности   -  person ozman    schedule 18.06.2016
comment
Вы проверили это? stackoverflow.com/questions/24551412/   -  person Bharat Gupta    schedule 18.06.2016
comment
можешь выложить свой конфигурационный файл?   -  person derloopkat    schedule 18.06.2016


Ответы (1)


Я использую подстановочный знак (*) в параметре {queryString}, что означает «остальная часть URI».

https://msdn.microsoft.com/en-us/library/bb675245.aspx

    [OperationContract]
    [WebGet(UriTemplate = "api/queries/{*queryString}",                        
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    Response Query(string queryString);
person ozman    schedule 18.06.2016