ServiceStack:如何在服务启动时更改API模型中的成员属性

本文关键字:模型 API 属性 成员 启动 服务 ServiceStack | 更新日期: 2023-09-27 18:00:09

我们在C#中开发的Web API中使用ServiceStack。我想在web服务启动时更改数据成员的必需属性。

目前,所需的属性在编译时是这样定义的:

[ApiMember(IsRequired=true)]
public string MyAttribute { get; set; }

我想在执行AppHost时"动态"定义它的值。配置。

有没有一种方法可以通过ServiceStack实现这一点?以同样的方式,我们使用Fluent api定义路由(例如:Routes.Add<HOPFlight>("/flight", "POST");)?

我读到了在ServiceStack中动态添加属性的答案,建议在AppHost构造函数中执行,但如何执行?

ServiceStack:如何在服务启动时更改API模型中的成员属性

您链接的问题在原始问题中提供了一个示例。请注意,如果您尝试将其添加到AppHost的配置功能中,可能为时已晚。您应该将其添加到AppHost的构造函数中。根据你的相关问题,mythz说

对于动态添加服务属性,您需要在AppHost。Configure(),因为到那时它们已经初始化Configure()正在运行,因此需要将它们添加到AppHost中构造函数或AppHost之前。Init()被调用。

在你的情况下,像这样的东西应该会起作用,

public AppHost(string serviceName, Assembly[] serviceAssemblies) : base(serviceName, serviceAssemblies)
{
    ApiMemberAttribute requiredAttribute = new ApiMemberAttribute {
        IsRequired = true
    } 
    Type[] requiredApiMembers = GetTypesToAddApiMemberAttributeTo();  //do whatever you need to get the types you want to add attributes to
    foreach(requiredApiMember in requiredApiMembers)
    {
      requiredApiMember.AddAttributes(requiredAttribute);
    }
}