【问题标题】:Getting attributes from current controller in owin middleware从 owin 中间件中的当前控制器获取属性
【发布时间】:2016-05-29 23:35:17
【问题描述】:

把我逼疯了,希望有人能帮助我。

使用 WebAPI 我可以做这样的事情

public class AuthenticationMessageHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage>SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        try
        {
            var config = GlobalConfiguration.Configuration;
            var controllerSelector = new DefaultHttpControllerSelector(config);
            var descriptor = controllerSelector.SelectController(request);

            var atts = descriptor.GetCustomAttributes<IgnoreValidationAttribute>();

这让我有了我的特质,我很开心,会笑,一切都很好。

但是

使用属性路由,相信是问题所在,使用上面的代码还是替换

var config = GlobalConfiguration.Configuration;

var config = request.GetConfiguration();

我得到空异常,我不那么开心和笑脸。当我被难住时,一些很棒的人能给我一些解决这个问题的建议吗?

提前致谢!

【问题讨论】:

    标签: asp.net-web-api2 owin self-hosting attributerouting


    【解决方案1】:

    这是我在 ASP MVC 应用程序中的做法,所以我认为应该有类似的方式从 Web API 中的请求中访问描述符

        using System.Web;
        using System.Web.Mvc;
    
        private bool HasAttribute<T>()
        {
            var skip = false;
            try
            {
                var routeDataList = HttpContext.Current.Request.RequestContext.RouteData.Values.Values.First() as IList<System.Web.Routing.RouteData>;
                var routeData = routeDataList.First() as System.Web.Routing.RouteData;
                var actionDescriptorList = routeData.DataTokens.Values.First() as IList<object>;
                var reflectedActionDescriptor = actionDescriptorList.First() as ReflectedActionDescriptor;
                skip = reflectedActionDescriptor.GetCustomAttributes(typeof(T), false)
                                                    .Any();
            }
            catch
            {
                //can't get the attributes; skip should be false
            }
            return skip;
        }
    

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 2013-06-03
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多