无法在DNX Core 5.0中使用Type.GetType(string TypeName)方法和MemberInfo.CustomAttributes属性

时间:2015-06-17 16:55:34

标签: asp.net-mvc asp.net-core asp.net-core-mvc

我正在尝试获取控制器和控制器方法的属性,但我似乎无法在DNX Core 5.0中提供必要的方法和属性。我想获得用户访问给定方法所需的角色。例如,如果我有这个

 [Authorize(Roles = "Admin")]
 public class UserController : Controller
 {
    public IActionResult Index()
    {
        return View();
    }
}

我希望能够让用户需要Admin角色才能访问此控制器。我的dnxcore50的project.json文件如下所示:

"dnxcore50": {
  "dependencies": {
    "System.Collections": "4.0.10-beta-*",
    "System.Collections.Concurrent": "4.0.10-beta-*",
    "System.IO": "4.0.10-beta-*",
    "System.Linq": "4.0.0-beta-*",
    "System.Linq.Expressions": "4.0.10-beta-*",
    "System.Reflection": "4.0.10-beta-*",
    "System.Reflection.Emit": "4.0.0-beta-*",
    "System.Reflection.Emit.Lightweight": "4.0.0-beta-*",
    "System.Reflection.Extensions": "4.0.0-beta-*",
    "System.Reflection.TypeExtensions": "4.0.0-beta-*",
    "System.Reflection.Primitives": "4.0.0-beta-*",
    "System.Runtime": "4.0.20-*",
    "System.Runtime.Extensions": "4.0.10-beta-*",
    "System.Runtime.CompilerServices.VisualC": "4.0.0-beta-*",
    "System.Runtime.InteropServices": "4.0.20-beta-*",
    "System.Text.Encoding": "4.0.10-beta-*",
    "System.Text.RegularExpressions": "4.0.10-beta-*",
    "System.Threading": "4.0.10-beta-*"
  }
}    

关于如何在DNX Core 5.0中获得必要的方法/属性或有关于如何解决此问题的任何其他建议的任何想法?

1 个答案:

答案 0 :(得分:3)

如果查看github上的源代码,可以看到它是如何处理的(第94行):

https://github.com/aspnet/Mvc/blob/eef6c3883a7e27b8387b0925f0b6a88df0a484c5/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Metadata/ModelAttributes.cs

如您所见,您必须使用GetTypeInfo()来使用GetCustomAttributes()方法。在您的代码中,您可以执行以下操作:

using System.Reflection;
...
obj.GetType().GetTypeInfo().GetCustomAttributes();