1

このコードを実行すると、属性値が空です

IEnumerable<object> attrs = ((typeof(Data).GetMethods().Select
(a => a.GetCustomAttributes(typeof(WebGetAttribute),true))));  
WebGetAttribute wg= attrs.First() as WebGetAttribute;    // wg is null

これは反映する私のクラスです:

public class Data
    {
       [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, UriTemplate = "/GetData")]
       string GetData(int value)
       {
           return "";
       }
    }

WCF サービスの各メソッドに関するこの情報 (メソッドの種類/応答形式/UriTemplate) を知るために助けが必要です

4

2 に答える 2

0

jblが正しいです。BindingFlags パラメーターがないと、GetMethods は非パブリック メソッドを返しません。また、WebInvokeAttribute は WebGetAttribute を継承しないため、GetCustomAttributes によって返されません。

次のコードは、すべてのパブリック メソッドと非パブリック メソッドの WebInvokeAttributes を選択します。

IEnumerable<object> attrs = typeof(Data)
    .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
    .SelectMany(a => a.GetCustomAttributes(typeof(WebInvokeAttribute), true));
于 2013-08-13T14:52:49.450 に答える