我在类方法上指定两个单独的Authorization属性时遇到问题:如果两个属性中的任何一个为true,则允许用户访问.
Athorization类看起来像这样:
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class AuthAttribute : AuthorizeAttribute {
. . .
Run Code Online (Sandbox Code Playgroud)
和行动:
[Auth(Roles = AuthRole.SuperAdministrator)]
[Auth(Roles = AuthRole.Administrator, Module = ModuleID.SomeModule)]
public ActionResult Index() {
return View(GetIndexViewModel());
}
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,还是我需要重新考虑我的方法?
这将在MVC2中运行.
请帮助我了解来自 ASP netcore 应用程序和 netcore Kestrel 托管应用程序的 JWT 令牌验证之间的区别。
有两个应用程序使用如下源代码验证令牌:
public static IServiceCollection AddJwtToken(this IServiceCollection services, OAuthConfig config)
{
services.AddMvc();
services.AddAuthorization();
Logger.DebugFormat("AddJwtBearer authority:{0} audience:{1}", config.GetAuthority(), config.Resource);
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => new JwtBearerOptions
{
Authority = config.GetAuthority(),
Audience = config.Resource,
});
return services;
}
Run Code Online (Sandbox Code Playgroud)
它非常简单,如果从 asp net core 2.2 应用程序验证令牌,它就可以很好地工作
// in the asp.net core
var builder = WebHost.CreateDefaultBuilder(args);
builder
.UseStartup<Startup>()
.ConfigureKestrel(_ => _.ConfigureEndpoints())
.UseSerilog();
Run Code Online (Sandbox Code Playgroud)
还有另一个应用程序(控制台)使用 UseKestrel
//in the console app
var builder = WebHost.CreateDefaultBuilder()
.UseNLog()
.UseKestrel(_ => _.ConfigureEndpoints())
.UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)
唯一的一个显着区别是UseKestrel …
我有一个关于提高程序效率的问题.我有一个Dictionary <string,Thingey>定义为名为Thingeys.这是一个Web应用程序,随着时间的推移将创建多个名为Thingey的.Thingey的创建成本有些高昂(并非过分夸大),但我希望尽可能避免使用它.我为请求获得正确的Thingey的逻辑看起来很像这样:
private Dictionary<string, Thingey> Thingeys;
public Thingey GetThingey(Request request)
{
string thingeyName = request.ThingeyName;
if (!this.Thingeys.ContainsKey(thingeyName))
{
// create a new thingey on 1st reference
Thingey newThingey = new Thingey(request);
lock (this.Thingeys)
{
if (!this.Thingeys.ContainsKey(thingeyName))
{
this.Thingeys.Add(thingeyName, newThingey);
}
// else - oops someone else beat us to it
// newThingey will eventually get GCed
}
}
return this. Thingeys[thingeyName];
}
Run Code Online (Sandbox Code Playgroud)
在这个应用程序中,Thingeys一旦创建就永远活着.我们不知道如何创建它们或者在应用程序启动和请求开始进入之前需要哪些.我在上面的代码中遇到的问题是偶尔出现newThingey的实例因为我们同时获得多个请求它在它被创建之前.我们最终创建了其中两个,但只添加了一个.有没有更好的方法来创建和添加Thingeys,不涉及检查/创建/锁定/检查/添加我们创建的罕见外来瘦,但最终永远不会使用?(而且这段代码有效并且已经运行了一段时间.这只是一直困扰着我的唠叨.)
我试图避免在创建Thingey期间锁定字典.
如果我有十几个端点,并且我的 WebAPI 服务配置为TLS 1.1和TLS 1.2,我如何检查每个传入的端点请求以查看协商的是哪个版本?
因此,如果我的端点的使用者目前仅支持TLS 1.0and TLS 1.1,他们将(显然?)协商TLS 1.1握手。但是如果不同的消费者支持TLS 1.2and TLS 1.3,他们会(显然?)协商TLS 1.2握手。
我想跟踪我所有的消费者,看看正在协商什么握手。我如何按请求执行此操作?
我正在使用带有DataAnnotations的ASP.NET MVC.我创建了以下自定义ValidationAttribute,它可以正常工作.
public class StringRangeAttribute : ValidationAttribute
{
public int MinLength { get; set; }
public int MaxLength { get; set; }
public StringRangeAttribute(int minLength, int maxLength)
{
this.MinLength = (minLength < 0) ? 0 : minLength;
this.MaxLength = (maxLength < 0) ? 0 : maxLength;
}
public override bool IsValid(object value)
{
//null or empty is <em>not</em> invalid
string str = (string)value;
if (string.IsNullOrEmpty(str))
return true;
return (str.Length >= this.MinLength && str.Length <= this.MaxLength);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,出现的错误消息是标准的"字段*无效".我想将其更改为:"[DisplayName]必须介于[minlength]和[maxlength]之间",但我无法弄清楚如何从此类中获取DisplayName甚至字段的名称.
谁知道?
我今天在一次采访中得到了这个问题:写一个函数来计算12天圣诞歌曲中任何一天收到的礼物总数.我在c#'ish代码中使用for()循环编写了一个简单的函数.然后面试官让我把它延长到任意天数.然后谈话转向如何优化循环.显然有一个很酷的数学技巧,可以在你的整数范围内做到这一点.任何人都知道它是什么以及它叫什么?任何语言都可以,并且算法的参考将是fabuloso.
使用递归的答案不是我正在寻找的.
编辑:第2天的答案是总共4个礼物,而不是3个,因为我将有2棵树(今天1个,昨天1个)和2个鹧.在第12天,我将收到总计364.我想要的公式让我输入12并得到364.
我有一个维护ac#项目的任务,我发现了一些像这样的代码:
try{
conn.Open();
...
conn.Close();
}catch(Exception e){
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
我知道关闭SqlConnection的常用方法是try-catch-finally或"using"关键字,但我发现我无法证明上面的代码是错误的,我找不到任何连接会泄漏的情况.
你能给我一些技术建议(不是编程风格)吗?谢谢
<!-- <script type="text/javascript">/*<![CDATA[*/ c-- ;//]]></script> -->
Run Code Online (Sandbox Code Playgroud)
当我在普通html页面的<head>部分中有上述行时,Firefox 3.5.5将尾随 - >呈现为文本.如果我将c--改为c-则不然.有什么想法在这里发生了什么?由于一个非常大的脚本被碾压,我在我的页面上得到了一个工件.我可以将语句改为c- = 1并暂时避免问题但是....我想知道什么位/字节咬我的a $$.
我正在开发具有 Web 作业和 azure 功能应用程序的应用程序。Web 作业生成 redis 缓存供函数应用使用。缓存大小约为 10 兆字节。我正在使用延迟加载,并按照建议进行所有操作。我仍然发现整体缓存操作很慢。根据我正在处理的文件的大小,我最终可能会调用 Redis 缓存多达 100,000 次。想知道我是否需要将缓存数据保存在本地变量中,而不是每次都从 redis 中读取。有没有人在访问 Redis 时遇到任何延迟?在 c# 函数应用程序中创建单色调对象并根据某些计时器或其他逻辑刷新它是否有意义?
c# ×5
asp.net-mvc ×3
asp.net-core ×2
ado.net ×1
algorithm ×1
caching ×1
comments ×1
dictionary ×1
firefox ×1
html ×1
locking ×1
openid ×1
redis ×1
script-tag ×1
ssl ×1
tls1.2 ×1