假设您在 C# 中有一个函数,它允许您打印出模型的属性,如下所示:
public void Export<T>(List<T> list)
{
// get properties of Model
Type modelType = typeof(T);
var modelInstance = Activator.CreateInstance(modelType);
PropertyInfo[] properties = modelInstance.GetType().GetProperties();
foreach (var property in properties)
{
if (property.CanRead)
PRINTOUT(property.Name);
}
foreach (var entity in list)
{
foreach (var property in properties)
{
if (property.CanRead)
PRINTOUT(property.GetValue(entity, null));
}
}
}
现在,这个函数在一个控制器中,所以,正如我所读到的,它是一个公开的 HTTP 端点!恶意用户是否有可能询问PRINTOUT
他不应该看到的属性?
为了避免这种情况,我想从另一个控制器调用这个函数,它传入一个非常特定的类型。
例如,PrintoutCustomers
在控制器Customers
调用该函数时,控制器Products
(使用 action PrintoutProducts
)也可以调用相同的函数,但传入产品列表(而不是客户)。
然后,用户将拥有一个可公开访问的 HTTP 端点的详细列表,其中没有一个会允许他做任何有害的事情。
我希望该功能是私有的并在我的所有控制器之间共享:这可能吗?我可以这样做吗?或者我真的必须在我需要的任何地方复制粘贴相同的方法(并且浪费我的时间尝试使用 typeof 和反射使其通用)?