有人可以在第258页解释这一段(Pro ASP.NET MVC 1.0第6章:使用HTML助手)吗?
如果你正在写第三方 图书馆(而不是网络) 应用程序)使用HTML 助手,永远不要调用过载 接受匿名对象。总是打电话 接受的重载 字典。否则,网络 消费你的应用程序作者 图书馆很可能会经历 SecurityExceptions。
答案 0 :(得分:2)
如果将匿名对象传递给助手,则应使用Reflection。
反射需要特权,如果没有特权,那么将抛出SecurityExpection-s。
答案 1 :(得分:1)
匿名类型是程序集内部的定义。
MVC是[SecurityTransparent],因此对于CLR来说,它看起来像MVC所做的任何事情实际上都是由您的应用程序执行的。如果您的第三方库也是[SecurityTransparent](它确实应该是)和部署到GAC,那么CLR会显示您的应用程序代码正在尝试执行私有反射GACed程序集。如果您的应用程序在中等信任模式下运行,或者没有反射权限,则会导致SecurityException。
编辑:这并不意味着第三方库不能在自己的代码中使用匿名对象。它只是意味着他们不应该将这些对象传递给尝试对这些对象执行反射的MVC API,例如 htmlAttributes 或 routeValues 。