使用 WCF HTTP Web API,UriTemplateMatch 始终为 null

发布于 2024-12-03 15:37:43 字数 838 浏览 0 评论 0原文

我已经根据我找到的最新教程设置了我的服务,一切似乎都工作正常。

但是,

为了访问包含 QueryParameters 集合(例如?name=tom&age=20)的 WebOperationContext.Current.IncomingRequest.UriTemplateMatch 类,我需要将服务配置为使用 WebHttpBehavior。我设法让它工作的唯一方法是使用控制台应用程序中的 WebServiceHost 自行托管它。我无法通过 IIS 或 cassini 的 web.config 或 global.asax 使其工作。

我觉得奇怪的是,关于如何使用 web-api 的教程在将其托管在 IIS 中之前谈论了 IoC:这不是更有用吗?他们似乎都使用极其简单的服务,根本不使用查询字符串,带有 IoC!

以下是我发现的几乎提到问题但没有解决问题的资源:

I've setup my service according to the latest tutorials I've found, and everything seems to work fine.

HOWEVER,

In order to access the WebOperationContext.Current.IncomingRequest.UriTemplateMatch class which contains the QueryParameters collection (e.g. ?name=tom&age=20), I need to have the service configured to use WebHttpBehavior. The only way I've managed to get this to work is to self host it using WebServiceHost from a console application. I can't get it to work from the web.config or global.asax from IIS or cassini.

I find it strange that tutorials on how to use the web-api talk about IoC before hosting the thing in IIS: wouldn't that be far more useful? They all seem to use extremely simple services that don't use query strings at all, with IoC!

Here are the resources I've found that almost mention the problem but don't fix it:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱要勇敢去追 2024-12-10 15:37:43

你可以这样做:

[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>

You can do something like this:

[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

yields:

<Contact>
<Id>19bae3a5-e2b7-4858-8aa4-08161ea18018</Id>
<Name>George</Name>
</Contact>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文