我有一个工厂,它实例化对象并填充用自定义属性标记的字段。Resharper 在这些字段下加上绿色下划线,抱怨“从未分配字段‘示例’”。为了抑制警告,我可以将MeansImplicitUseAttribute加到我的自定义属性中。问题是该属性还抑制了“从未使用过字段'示例' ”警告,这对我很有帮助,所以我想保留它。
我可以标记我的属性,这样我就不会收到“从未分配”的警告,但我仍然会收到“从未使用过”的警告吗?
我有一个 Web API 项目,我打算使用继承自的属性ActionFilterAttribute以标准化方式进行日志记录。作为该日志记录的一部分,我想从HttpActionContext该OnActionExecuting方法中提取一些值。然后我想将它们称为OnActionExecuted. 我已经指定了[AttributeUsage(AttributeTargets.Class)]这个属性。我的假设是,我的自定义属性将与它所应用的类一起实例化,并且与应用该属性的类具有相同的生命周期。我找不到任何具体支持这一点的东西。我已经做了一些测试,这似乎是它的工作原理,但我担心我的测试太有限。我假设对同一控制器的多次调用将生成该控制器的新实例,从而生成该属性的新实例。我基本上担心作为OnActionExcecuting.
有人知道可以证实或否定我的假设的任何资源或链接吗?
我在 API 控制器中有一个 GET 方法。我希望使用自定义验证属性来验证该方法,如下所示。但是由于某些原因它没有被解雇。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class CheckValidRoute : ValidationAttribute
{
private readonly string _apiRoute;
private readonly string _operation;
public override bool RequiresValidationContext { get { return true; } }
public CheckValidRoute(string apiRoute, string operation)
{
_apiRoute = apiRoute;
_operation = operation;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
//Validation logic here
}
}
Run Code Online (Sandbox Code Playgroud)
public class TestController : ControllerBase
{
[HttpGet("production/{movieId}/Test")]
[ProducesResponseType(typeof(ResponseModel<string>), 200)]
[Authorize(Policy = SecurityConstants.PseudofilmAuthorizationPolicy)]
[CheckValidRoute("production/{movieId}/Test", "GET")]
public async Task<ResponseModel<string>> TestGet(long movieId) …Run Code Online (Sandbox Code Playgroud) 我正在编写自定义表单验证javascript库,我正在考虑正确的标记语法.假设我的输入需要1 000到10 000之间的数字.
到目前为止,我提出了这样的事情:
<input class='validate required number' min='1000' max='10000' />
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?我有两个问题:
min,max不验证.如何在程序集中找到每个自定义属性?
如果可以从使用该属性的程序集中找到所有类型,但这还不够.方法,属性,枚举,枚举值,字段等如何
这样做有什么快捷方式,或者是编写代码来搜索某个类型的所有部分(属性,字段,方法等)的唯一方法吗?
Reflector做到了这一点,不知道它是如何实现的.
如果我创建一个返回的ActionResult的控制器的方法,然后在最后调用视图(),有没有办法有一个过滤器(或东西simular)改变从视图()发射到PartialViewResult的的ViewResult根据条件返回的结果在请求中?
很明显,我可以在控制器方法本身中使用返回ViewResult或PartialViewResult的代码,但是这会出现在很多地方,因此它似乎很好地使用了Filter.我尝试在IResultFilter的两个方法中都这样做,并且没有看到输出的变化.
如果这是不可能的,那么我将着眼于建立在我的基地控制器的一些方法被称为像ViewOrPartial,我可以打电话,而不是浏览,但我想寻求更广泛的智慧上的过滤器(或类似的东西)的方式放弃之前.
谢谢,马修
更新:所以看来间现正根据达林的代码是什么我曾试图和什么至少一个区别是,我已经覆盖OnResultExecuting(我还曾试图OnResultExecuted)和Darin的代码覆盖OnActionExecuted.这看起来很奇怪还是我可能忽略了别的东西?我很高兴让它工作,但将它附加到IResultFilter接口似乎更有意义.我将不得不更多地研究这两个接口的意图.
背景: 我有一个自定义类,它代表一个数据库表,每个属性对应一个表列.这些属性可以分为三种方式.
示例:以Person对象为例.
RawDataProperties :(这些列包含来自外部源的原始数据)
公共类人{
#region MetaProperties
public int Person_ID { get; set; }
public UserDefinedType UDT { get; set; }
public DateTime timestamp { get; set; }
#endregion
#region RealProperties
public string FullName { get; set; }
public DateTime DateOfBirth { get; set; }
public string PlaceOfBirth { get; set; } …Run Code Online (Sandbox Code Playgroud)我正在使用Attributes构建一些东西.我真的想要作为属性实现的一件事是convert a string to this property's type using this function.现在,我有这个:
public delegate object ParameterConverter(string val);
[AttributeUsage(AttributeTargets.Property)]
public class ParameterConverterAttribute : ParameterBaseAttribute
{
ParameterConverter Converter;
public ParameterConverterAttribute(ParameterConverter converter)
{
Converter=converter;
}
public object Convert(string val)
{
return Converter(val);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
public class Tester
{
[ParameterConverter(new ParameterConverter(TestConverter)] //error here
public int Foo{get;set;}
static object TestConverter(string val)
{
return 10;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,.Net或至少C#似乎不支持这种事情.似乎属性内的委托不起作用.
是否有解决此问题的方法或处理此问题的好方法?
问候StackOverflow,
如果我有一个带有Flag属性的枚举类型以及此枚举类型中具有各自属性的值,我该如何检索所有适当的属性?
例如:
[Flags()]
enum MyEnum
{
[EnumDisplayName("Enum Value 1")]
EnumValue1 = 1,
[EnumDisplayName("Enum Value 2")]
EnumValue2 = 2,
[EnumDisplayName("Enum Value 3")]
EnumValue3 = 4,
}
void Foo()
{
var enumVar = MyEnum.EnumValue2 | MyEnum.EnumValue3;
// get a collection of EnumDisplayName attribute objects from enumVar
...
}
Run Code Online (Sandbox Code Playgroud) 我想使用C#的反射和自定义属性来简化使用中央管理类注册一系列类型(即它提供了采用字符串键并调用/检索相关类型的正确方法/参数的静态方法).看看这里的其他问题和其他地方的几个地方,似乎最好的方法是简单地遍历所有公共类型的程序集 - 因为它打算成为一个库 - 并检查每种类型是否具有正确的在将相关值添加到基础词典之前的属性.反射和迭代肯定会很慢,但我可以忍受它,因为它应该只发生一次.
不幸的是,我无法弄清楚如何从类型中获取属性.对于方法和程序集,我可以使用CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base)from System.Reflection.Extensions,但是不提供重载Type; 与此问题中使用的相同Assembly.GetCustomAttribute(Assembly, Type)和.IsDefined(...)方法相同.其他建议使用自己的方法,从文档中看起来似乎是从中加载的,但是即使在添加引用之后它似乎也没有出现在Intellisense中,我不确定.dll是如何与.NET交互的标准,无论如何(因为它会降低在任意平台上运行的能力吗?) Typemscorelib.dll
我错过了一些明显的东西,还是真的难以Attribute退出Type?
c# ×8
.net ×2
reflection ×2
asp.net-core ×1
attributes ×1
delegates ×1
enums ×1
markup ×1
resharper ×1
xhtml ×1