我在我的 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) 我的项目有这个 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)
谢谢,一定有比我上面尝试的更好的方法。
我正在玩DynamicMethod和表达树的编译(在DynamicMethod内部使用).
然后我想知道是否有一种方法可以为生成的方法添加自定义属性.我用Google搜索,但我找不到办法.我知道可以使用CodeDom,但我想使用DynamicMethod.
有人提到类型描述符,但我不确定它是否有帮助.
有谁知道为使用生成的方法定义自定义属性的方法DynamicMethod?
我需要这样的
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)
但我只需要属性.
我有这个自定义授权类来检查用户是否是管理员:
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)
并且工作正常但在用户未获得授权时将我带回登录页面.我想要发生的是将用户重定向到某处,并弹出错误消息.如何处理拒绝访问事件?
想象一下,我有以下代码:
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)...)调用.我感到困惑的是如何在实际实例上而不是在类型级别上提取这些值.
非常感谢,皮特
如果我有这个:
<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)
但它返回了两个跨度.
我要求允许用户通过我的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)
我不确定哪个更好,但我会尝试第二个 - 欢迎任何评论.
我想通过使用扩展方法检查我的类成员(仅限字段)上的自定义属性.
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) 我有自定义属性,采取对象数组.我试图传递一个对象数组,但收到编译器错误:
属性参数必须是属性参数类型的常量表达式,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# ×7
attributes ×4
.net ×2
asp.net-mvc ×2
reflection ×2
html5 ×1
https ×1
jquery ×1
linq ×1
razor ×1
security ×1
select ×1