gpt4 book ai didi

c# - 将类方法名称作为 lambda 表达式传递

转载 作者:太空宇宙 更新时间:2023-11-03 20:08:06 26 4
gpt4 key购买 nike

我正在为具有各种安全要求的各种客户端的一些 api 调用编写一个插件框架,以收集各种特定于业务的数据。所有插件都实现了如下所示的 IApiServiceEntryPoint:

public interface IApiServiceEntryPoint : IDisposable
{
/// <summary>
/// Gets the name of the API Plugin
/// </summary>
string Name { get; }

/// <summary>
/// Registers the assembly in the application, sets up the routes, and enables invocation of API requests
/// </summary>
void Register();

/// <summary>
/// Gets the routing namespace of the plugin
/// </summary>
string UrlNameSpace { get; }

/// <summary>
/// Validates the user is authorized to invoke the supplied method.
/// </summary>
/// <param name="methodName"></param>
bool IsAuthorized(string methodName);

/// <summary>
/// The user initiating the API call
/// </summary>
IPrincipal User { get; }
}

请注意 IsAuthorized 方法。我的目的是让插件确定特定的 IPrincipal 是否有权调用具体类中的特定方法。使用字符串是可行的,但我宁愿更具体和可重构;例如,使用 lambda 表达式。

目前,我可以在我的 API Controller 中做这样的事情:

    [HttpGet]
public DateTime GetSystemTimeStamp()
{
if (IsAuthorized("GetSystemTimeStamp"))
{
return DateTime.UtcNow;
}
throw new AuthorizationException();
}

我想做的是这样的:

   [HttpGet]
public DateTime GetSystemTimeStamp()
{
if (IsAuthorized(me => me.GetSystemTimeStamp))
{
return DateTime.UtcNow;
}
throw new AuthorizationException();
}

我如何在我的界面中声明它,我如何提取 IsAuthorized 方法中的方法名称来检查授权?

最佳答案

你不需要 lambda;您可以直接将方法作为委托(delegate)传递:

public bool IsAuthorized<T>(Func<T> method) {
string name = method.Method.Name;
}
if (IsAuthorized(GetSystemTimeStamp))

您将需要单独的 Func<,,,T>为您要接受的每个方法重载;他们都可以简单地调用一个采用 Delegate 的通用方法.
或者,您可以只创建一个采用 Delegate 的方法。 ,然后在每个调用点显式创建一个委托(delegate)。

关于c# - 将类方法名称作为 lambda 表达式传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com