如何在不显示这些方法的情况下将GET / PUT / POST请求定向到不同的WCF方法?

时间:2012-06-28 16:07:44

标签: c# json wcf http rest

我创建了一个WCF Web服务,它可以容纳多种类型的请求(PUT / DELETE / POST / JSON / POX / SOAP)。为此,我为每个请求flavor进行了单独的操作,其中包含定义请求类型的属性。所以如果我有一个名为“WordInfo()”的操作,我会有“WordInfo_POST”,“WordInfo_GETXML()”,“WordInfo_GETJSON()”等。

问题在于,当用户在客户端应用程序中使用WSDL时,我宁愿不向用户显示这些附加方法。换句话说,我不希望它们出现在intellisense中。这是我正在谈论的一个例子:

[ServiceContract]
interface IWVLibrary
{
    [OperationContract]
    [WebGet(UriTemplate = "WordInfo/{Data}/{ApiKey}?format=xml", ResponseFormat = WebMessageFormat.Xml)]
    [return: MessageParameter(Name = "WordInfo")]
    WordInfoResult WordInfo_GETXML(string data, string ApiKey);

    [OperationContract]
    [WebGet(UriTemplate = "WordInfo/{Data}/{ApiKey}?format=json", ResponseFormat = WebMessageFormat.Json)]
    [return: MessageParameter(Name = "WordInfo")]
    WordInfoResult WordInfo_GETJSON(string Data, string ApiKey);

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [return: MessageParameter(Name = "WordInfo")]
    WordInfoResult WordInfo_POST(string Data, string ApiKey);

    [OperationContract]
    [WebInvoke(Method = "PUT", UriTemplate = "", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [return: MessageParameter(Name = "WordInfo")]
    WordInfoResult WordInfo_PUT(string Name, string ApiKey);

    [OperationContract]
    [WebInvoke(Method = "DELETE", UriTemplate = "WordInfo/{Data}/{ApiKey}", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
    [return: MessageParameter(Name = "WordInfo")]
    WordInfoResult WordInfo_DELETE(string Data, string ApiKey);

    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
    WordInfoResult WordInfo(string Data, string ApiKey);
}

但是在这个例子中,我只想公开曝光“WordInfo()”。

我尝试将操作设为私有,但它要么不编译,要么不再接受请求的类型。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您应该使用WebAPI,这符合您的需求。

答案 1 :(得分:0)

REST服务没有WSDL。

你想做什么呢?无论如何用户将看不到任何方法,因为没有WSDL。

是的,对于REST服务存在“帮助”页面,您可以禁用标准帮助页面并自行创建,并仅描述您想要公开的方法。

或者如果您不希望客户端使用某些方法,只是不要公开它并删除它们上的WebGet,WebInvoke属性