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

时间:2016-08-04 16:17:50

标签: c# rest asp.net-web-api servicestack

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

目前,必需属性在编译时以这种方式定义:

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

我想动态地定义它的价值'执行AppHost.Configure时。

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

我阅读了答案Dynamically adding attributes in ServiceStack,建议在AppHost构造函数中执行此操作,但该怎么做?

1 个答案:

答案 0 :(得分:3)

您链接的问题在原始问题中提供了一个示例。请注意,如果您尝试在AppHost的Configure功能中添加它,则可能为时已晚。您应该将它添加到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);
    }
}