1

我正在使用 WCF 创建一个 ReSTful 服务。假设我的 OperationContract 是这样的:

[OperationContract]
[WebGet(
 ResponseFormat = WebMessageFormat.Json,
 BodyStyle = WebMessageBodyStyle.Wrapped,
 UriTemplate = "GetItemList/{token}/{value}"
)]
Stream GetItemList(string token);

因此,当我调用http://example.com/Service1.svc/GetItemList/myToken/myValue时,将调用该服务。

现在我想写一个默认方法说一些链接,'没有方法/端点存在',当用户调用 http://example.com/Service1.svc/GetItemList/myToken/http://example.com/ Service1.svc/GetItemList/myValue/http://example.com/Service1.svc/GetItemList/

如何在我的代码中实现它?

现在我正在做的是这样的:

 [OperationContract]
 [WebGet(
   ResponseFormat = WebMessageFormat.Json,
   BodyStyle = WebMessageBodyStyle.Wrapped,
   UriTemplate = "GetItemList/"
 )]
 string ValidateItemList();

 [OperationContract]
 [WebGet(
   ResponseFormat = WebMessageFormat.Json,
   BodyStyle = WebMessageBodyStyle.Wrapped,
   UriTemplate = "GetItemList/{Val1}"
 )]
 string ValidateItemList(string Val1);

在函数中,我只返回一个字符串“不存在方法”。

有没有更好的办法?我可以为定向到我的服务的 url 自定义错误消息吗?比如说,针对我的服务的所有非现有 url 请求的通用消息?

4

2 回答 2

0

基本上,WCF 的体系结构试图将任何协议(在本例中为 http)的低级组件抽象出来,因此您不必担心这些类型的细节。不幸的是,该引擎没有公开处理引擎无法正确路由的请求的好方法。

在这种情况下,URI 不能被“分派”到正确的合约实现类。引擎有这些很棒的组件,等等,Dispatchers,它们可以在 wcf 框架内通过配置或编程方式进行定制。问题是它们实施起来很痛苦。我在对另一个问题的回答中实现了意外消息调度程序,如下所列:

处理传递给 WCF 服务的无效 URI

如果您需要任何进一步的信息,请告诉我!

于 2012-08-01T15:26:02.743 回答
0

对于上述问题,我没有找到任何可行的解决方案。但我找到了另一种选择。在 VS 2012 中,微软发布了 ASP.NET Web API。他们说,这是 WCF Rest 的下一个版本。所以在那个时候,你可以很容易地处理这些情况。我们可以在其中使用路由方法。

任何对该解决方案感兴趣的人都可以查看这篇文章以获得领先优势:http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web- api

于 2012-11-15T09:11:24.570 回答