【问题标题】:How can we access request context in custom attributes in ASP.NET Core?我们如何在 ASP.NET Core 的自定义属性中访问请求上下文?
【发布时间】:2020-05-20 13:13:24
【问题描述】:

我使用 asp.net 核心 API,我的问题是

我将如何访问自定义属性中的请求上下文,实际上我是在我想在此处访问的请求标头中发送时区信息。

我的 C# 日期验证代码是

public class DateRangeAttribute : ValidationAttribute
{
    public string StartDate { get; set; }
    public string EndDate { get; set; }
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (validationContext == null)
        {
            throw new ArgumentNullException();
        }
       return new ValidationResult("Date is not in given range.", new List<string>() {
                                                validationContext.MemberName 
                                  });
        }
    }

我的模特是

[DateRange(StartDate = "01/01/2000", EndDate = "12/31/9999")]
public DateTime StartWork { get; set; }

【问题讨论】:

    标签: c# asp.net-core asp.net-web-api


    【解决方案1】:

    您可以使用ValidationContext.GetService 获取IHttpContextAccessor。它将允许您获取当前的HttpContext

    【讨论】:

    • 谢谢。其实我是通过IHttpContextAccessor 这就是问题
    • 我忘记通过IHttpContextAccessor
    【解决方案2】:

    你可以创建一个静态类

    public static class HttpHelper
    {
         private static IHttpContextAccessor _accessor;
         public static void Configure(IHttpContextAccessor httpContextAccessor)
         {
              _accessor = httpContextAccessor;
         }
    
         public static HttpContext HttpContext => _accessor.HttpContext;
    }
    

    然后在启动配置中分配 IHttpContextAccessor 应该可以完成这项工作。

    HttpHelper.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());
    

    我猜你应该还需要注册服务单例:

    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    

    现在您可以在任何地方获取 HttpContext:

    HttpHelper.HttpContext 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多