标签: custom-attributes

授权属性忽略 [AllowAnonymous]

我在我的 asp.net web api 中设置了客户授权属性

全局文件:

  FilterConfig.RegisterHttpFilters(GlobalConfiguration.Configuration.Filters);
Run Code Online (Sandbox Code Playgroud)

FilterConfig.cs

public static void RegisterHttpFilters(System.Web.Http.Filters.HttpFilterCollection filters)
    {
        filters.Add(new TokenAuthentication(""));
    }
Run Code Online (Sandbox Code Playgroud)

认证类别:

  public class TokenAuthentication : Attribute, IAuthenticationFilter
{
    private readonly string realm;

    public bool AllowMultiple { get { return false; } }

    public TokenAuthentication(string realm)
    {
        this.realm = "realm=" + realm;
    }      

    public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
    {
        var request = context.Request;

        // Receive token from the client. Here is the example when token is in header:
        string token = null;

        if …
Run Code Online (Sandbox Code Playgroud)

c# authorization custom-attributes asp.net-web-api

3
推荐指数
1
解决办法
4004
查看次数

获取枚举的自定义属性的属性

我的项目有这个 BookDetails 属性:

public enum Books
{
    [BookDetails("Jack London", 1906)]
    WhiteFange,

    [BookDetails("Herman Melville", 1851)]
    MobyDick,

    [BookDetails("Lynne Reid Banks", 1980)]
    IndianInTheCupboard

}
Run Code Online (Sandbox Code Playgroud)

以及此处的属性代码:

[AttributeUsage(AttributeTargets.Field)]
public class BookDetails : Attribute
{
    public string Author { get; }
    public int YearPublished { get; }

    public BookDetails(string author, int yearPublished)
    {
        Author = author;
        YearPublished = yearPublished;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何获取给定书籍的作者?

尝试了这个混乱的代码,但它不起作用:

 var author = Books.IndianInTheCupboard.GetType().GetCustomAttributes(false).GetType().GetProperty("Author");  // returns null
Run Code Online (Sandbox Code Playgroud)

谢谢,一定有比我上面尝试的更好的方法。

c# reflection attributes custom-attributes

3
推荐指数
1
解决办法
3237
查看次数

如何将自定义属性添加到DynamicMethod生成的方法?

我正在玩DynamicMethod表达树编译(在DynamicMethod内部使用).

然后我想知道是否有一种方法可以为生成的方法添加自定义属性.我用Google搜索,但我找不到办法.我知道可以使用CodeDom,但我想使用DynamicMethod.

有人提到类型描述符,但我不确定它是否有帮助.

有谁知道为使用生成的方法定义自定义属性的方法DynamicMethod

.net c# custom-attributes dynamicmethod

2
推荐指数
1
解决办法
925
查看次数

是否有任何属性默认值初始化属性?

我需要这样的

public class AA{
   public AA(){}
   [Default("hi")]
   public string value1{get;set}
   [Default(12)]
   public int value2{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

用法:

AA a=new AA();
print(a.value1);  //result: hi
print(a.value2);  //result: 12 
Run Code Online (Sandbox Code Playgroud)

是否有可能像这样创造?

我知道另一种方式

Public class AA{
   public AA(){value1="hi";value2=12}
   ...
}
Run Code Online (Sandbox Code Playgroud)

除此以外

AA a=new AA(){value1="hi",value2=12};
Run Code Online (Sandbox Code Playgroud)

但我只需要属性.

c# attributes custom-attributes

2
推荐指数
1
解决办法
349
查看次数

使用自定义属性处理未授权的

我有这个自定义授权类来检查用户是否是管理员:

public class IsAdminAttribute : AuthorizeAttribute
    {
        private datacontext() db = new datacontext();
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var isAuthorized = base.AuthorizeCore(httpContext);
            if (isAuthorized)
            {
                var currentUser = httpContext.User.Identity.Name;
                return db.Users.Where(u => u.UserName == currentUser).Where(ut => ut.UserTypeID == 2).Count() == 1 ? true : false;
            }
            return isAuthorized;
        }

    }
Run Code Online (Sandbox Code Playgroud)

并在这里使用:

[IsAdmin]
public ActionResult CreateUser()
{
    ViewBag.UserTypeID = new SelectList(db.UserTypes, "UserTypeId", "Name");
    return View();
}
Run Code Online (Sandbox Code Playgroud)

并且工作正常但在用户未获得授权时将我带回登录页面.我想要发生的是将用户重定向到某处,并弹出错误消息.如何处理拒绝访问事件?

asp.net-mvc attributes custom-attributes asp.net-mvc-3

2
推荐指数
1
解决办法
1548
查看次数

在c#中访问实例级自定义属性

想象一下,我有以下代码:

class A
{
    [UsefulAttribute("foo")]
    B var1;
    [UsefulAttribute("bar")]
    B var2;

    ...
}


class B
{
    public string WriteSomethingUseful()
    {
        ?????
    }
}  
Run Code Online (Sandbox Code Playgroud)

我的问题是,它需要在什么代码中放入????? 这样,当我调用var1.WriteSomethingUseful时,我得到一个foo的输出,当我调用var2.WriteSomethingUseful时,我得到一个bar的输出?

我有一种感觉,这是一个非常直截了当的问题,我认为我的主要问题是我通过长时间的思考让自己陷入混乱状态!

说真的,我定义了UsefulAttribute,并意识到部分代码必须是GetCustomAttributes(typeof(UsefulAttribute)...)调用.我感到困惑的是如何在实际实例上而不是在类型级别上提取这些值.

非常感谢,皮特

.net c# reflection custom-attributes

2
推荐指数
1
解决办法
1250
查看次数

jQuery - 我如何选择相同的html5自定义属性

如果我有这个:

<span data-helo="1">something</span>
<span data-helo="2">something different</span>
Run Code Online (Sandbox Code Playgroud)

我想针对第一个跨度,我应该怎么做?

我尝试过类似的东西:

$('span').data('helo', '1')
Run Code Online (Sandbox Code Playgroud)

但它返回了两个跨度.

jquery html5 select custom-attributes

2
推荐指数
1
解决办法
868
查看次数

MVC RequireHttps属性毫无价值?

我要求允许用户通过我的asp.net MVC应用程序中的表单更改其密码.我的第一个想法是使用RequireHttps属性修饰ChangePassword操作.

但是,我仍然必须在属性启动之前发送未加密的密码并返回"所请求的资源只能通过SSL访问".这打败了目的,不是吗?

我确信我只是困惑而且RequireHttps很有用; 我想知道是否有办法使用RequireHttps来实现我的目标.或者,我想知道实现它的任何其他方式.

更新:

我现在有了一些选项,感谢下面的答案 - 我可以使用https在iframe中加载密码输入,这意味着来自它的任何帖子都将被加密.另外,我可以在构造post url的代码中将协议设置为https:

var url = '@Url.Action("changePassword", "Security", new { area = "" }, "https")'
Run Code Online (Sandbox Code Playgroud)

我不确定哪个更好,但我会尝试第二个 - 欢迎任何评论.

security asp.net-mvc https custom-attributes razor

2
推荐指数
1
解决办法
6974
查看次数

使用扩展方法访问字段上的属性

我想通过使用扩展方法检查我的类成员(仅限字段)上的自定义属性.

public class DatabaseIdAttribute : Attribute
{
    public int ID { get; set; }

    public DatabaseIdAttribute(int id)
    {
        this.ID = id;
    }
}

public class MyClass 
{
    [DatabaseId(1)]
    double Height {get;set;}

    [DatabaseId(2)]
    double Width {get;set;}

    double Area { get { return this.Height * this.Width; }
}
Run Code Online (Sandbox Code Playgroud)

我想在扩展方法中使用LINQ表达式来访问类字段而不是传递魔术字符串.

var myClass = new MyClass();
var attribute = myClass.GetAttribute<DatabaseIdAttribute>(c => c.Height);
Run Code Online (Sandbox Code Playgroud)

有可能实现吗?

[编辑]

目前,我已经在@leppie的帮助下取得了以下成绩

    public static MemberInfo GetMember<T, R>(this T instance, Expression<Func<T, R>> selector)
    {
        var member = selector.Body as MemberExpression;
        if (member …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods custom-attributes

2
推荐指数
1
解决办法
1800
查看次数

将一组对象传递给Attribute构造函数

我有自定义属性,采取对象数组.我试图传递一个对象数组,但收到编译器错误:

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式.

这是代码:

[AttributeUsage(AttributeTargets.Class)]
public class MyAttribute : Attribute
{
    public MyAttribute(Person[] people)
    {
         People = people;
    }

    public Person[] People{get; private set;}
}

public class Person
{
    public string Name{get;set;}
    public string LastName{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我在网上看到了一些文章,但没有看到更接近我的文章.我做错了什么或者是错误?如果不是bug可以解释为什么我不能传递数组Person?我尝试了一串字符串,它工作正常.

c# attributes custom-attributes

2
推荐指数
1
解决办法
4652
查看次数