我正在使用WCF创建一个ReSTful服务。假设我的操作合同是这样的:
[OperationContract]
[WebGet(
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "GetItemList/{token}/{value}"
)]
Stream GetItemList(string token);
因此,当我调用 http://example.com/Service1.svc/GetItemList/myToken/myValue 时,将调用该服务。
现在我想写一个默认方法,说一些链接,"不存在方法/端点",wen用户调用 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 请求的通用消息?
基本上,WCF 的体系结构尝试将任何协议(在本例中为 http)的低级组件抽象出来,因此您不必担心这些类型的详细信息。不幸的是,该引擎没有公开处理引擎无法正确路由的请求的好方法。
在这种情况下,无法将 URI "分派"到正确的协定实现类。 引擎有这些奇妙的组件,称为,等待它,调度程序,可以在 WCF 框架内通过配置或编程方式进行自定义。问题是它们实施起来很痛苦。我在回答另一个问题时实现了意外的消息调度程序,如下所示:
处理传递给 WCF 服务的无效 URI
如果您需要任何进一步的信息,请告诉我!
为上述问题找到任何可行的解决方案。但我找到了另一种选择。在VS 2012中,Microsoft发布了 ASP.NET Web API。他们说,这是WCF Rest的下一个版本。因此,在T中,您可以非常轻松地处理这些情况。我们可以在其中使用路由方法。
任何对该解决方案感兴趣的人都可以查看这篇文章以获得良好的开端:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api