我正在使用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);
在函数中,我只返回一个字符串,上面写着“No methods Exists”。
有更好的方法吗?对于定向到我的服务的网址,我可以自定义错误消息吗?比如说,所有非现有网址请求的常见消息都是针对我的服务的?
答案 0 :(得分:0)
基本上,WCF的体系结构试图将任何协议的低级组件(在本例中为http)抽象出来,因此您不必担心这些类型的细节。不幸的是,y,该引擎没有公开处理引擎无法正确路由的请求的好方法。
在这种情况下,URI不能“分派”到正确的合同实现类。引擎有这些奇妙的组件,等待它,Dispatchers,可以在wcf框架内通过配置或编程自定义。问题是他们实施起来非常痛苦。我在下面列出的另一个问题的答案中实现了意外的消息调度程序:
Handling Invalid URI passed to a WCF service
如果您需要任何进一步的信息,请告诉我们!
答案 1 :(得分:0)
我没有为上述问题找到任何可行的解决方案。但我找到了另一种选择。借助VS 2012,Microsoft发布了ASP.NET Web API。他们说,这是WCF Rest的下一个版本。所以在这里,你可以很容易地处理这些情况。我们可以在其中使用路由方法。
任何对该解决方案感兴趣的人都可以查看这篇文章,以便提前开始:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api