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

2

您似乎没有选择 NonPublic 方法或正确的属性类型。

您可以尝试:

IEnumerable<object> attrs = 
     typeof(Data).GetMethods(BindingFlags.Public|BindingFlags.NonPublic)
      .SelectMany(a => a.GetCustomAttributes(typeof(WebInvokeAttribute),true));  

WebInvokeAttribute wi = attrs.First() as WebInvokeAttribute ;    
于 2013-08-13T14:20:28.377 回答
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 回答