Obter atributos personalizados da expressão de propriedade do Lambda

Eu estou usando o ASP.NET MVC 2 Preview 2 e escrevi um método de extensão HtmlHelper personalizado para criar um rótulo usando uma expressão. O TModel é de uma classe simples com propriedades e as propriedades podem ter atributos para definir requisitos de validação. Eu estou tentando descobrir se um determinado atributo existe na propriedade que a expressão representa no meu método de rótulo.

O código para a classe e o rótulo é:

public class MyViewModel
{
    [Required]
    public string MyProperty { get; set; }
}

public static MvcHtmlString Label<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string label)
{
    return MvcHtmlString.Create(string.Concat("<label for=\"", expression.GetInputName(), "\">", label, "</label>"));
}

public static string GetInputName<TModel, TProperty>(this Expression<Func<TModel, TProperty>> expression)
{
    return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1);
}

Então eu chamaria o rótulo assim:

Html.Label(x => x.MyProperty, "My Label")

Existe uma maneira de descobrir se a propriedade no valor da expressão passada para o método Label possui o atributo Required?

Eu descobri que fazer o seguinte me traz o atributo, se existir, mas espero que haja uma maneira mais limpa de conseguir isso.

public static MvcHtmlString Label<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string label)
{
    System.Attribute.GetCustomAttribute(Expression.Property(Expression.Parameter(expression.Parameters[0].Type, expression.GetInputName()), expression.GetInputName()).Member, typeof(RequiredAttribute))

    return MvcHtmlString.Create(string.Concat("<label for=\"", expression.GetInputName(), "\">", label, "</label>"));
}

questionAnswers(2)

yourAnswerToTheQuestion