Используя веб-API WCF HTTP, UriTemplateMatch всегда имеет значение null - PullRequest
1 голос
/ 08 сентября 2011

Я настроил свой сервис в соответствии с последними учебниками, которые я нашел, и все, кажется, работает нормально.

ОДНАКО,

Для доступа к WebOperationContext.Current.IncomingRequestКласс .UriTemplateMatch, который содержит коллекцию QueryParameters (например,? Name = tom & age = 20), мне нужно настроить службу для использования WebHttpBehavior.Единственный способ, которым мне удалось заставить это работать, состоит в том, чтобы самостоятельно разместить это, используя WebServiceHost из консольного приложения.Я не могу заставить его работать из web.config или global.asax из IIS или cassini.

Мне кажется странным, что в руководствах по использованию web-api говорится о IoC, прежде чем размещать его вIIS: разве это не будет гораздо полезнее?Кажется, что все они используют чрезвычайно простые сервисы, которые вообще не используют строки запроса, с IoC!

Вот ресурсы, которые я обнаружил, которые почти упоминают проблему, но не решают ее:

1 Ответ

3 голосов
/ 08 сентября 2011

Вы можете сделать что-то вроде этого:

[ServiceContract]
public class ContactResource {
    [WebGet(UriTemplate = "")]
    public HttpResponseMessage<Contact> Get(HttpRequestMessage request) {
        var querystring = request.RequestUri.Query;
        var parameters = HttpUtility.ParseQueryString(querystring);
        var name = parameters["Name"];
        return new HttpResponseMessage<Contact>(
            new Contact()
                {
                    Id = Guid.NewGuid(),
                    Name = name
                });
    }
}

http://localhost:12741/contact?name=George

выход:

<Contact>
<Id>19bae3a5-e2b7-4858-8aa4-08161ea18018</Id>
<Name>George</Name>
</Contact>
...