1

根据 ServiceStack 的 wiki 示例,如果您有这样的 URI:

www.servicestack.net/ServiceStack.Hello/servicestack/hello?Name=World

您的请求 DTO 如下所示:

[Route("/hello")]
public class Hello
{
    public string Name { get; set; }
}

但是,如果 URI 是这样的:

www.servicestack.net/ServiceStack.Hello/servicestack/hello?n=World

您将如何使用上面相同的 DTO 但将 Name 映射到“n”?是否有一个属性可以用来装饰 DTO 属性?

我尝试使用 DataContract 和 DataMember 属性,如下所示:

[DataContract]
[Route("/hello")]
public class Hello
{
    [DataMember(Name = "n")]
    public string Name { get; set; }
}

但是,这很好用,当您有很多属性时,它会停止工作,除非您使用 [DataMember] 属性装饰每个属性。

无论如何提供与属性不同的参数的自定义名称而不使用 DataContract 和 DataMember?也许是 ServiceStack 提供的自定义属性,所以只有需要以不同方式映射的属性才具有属性,而其余的就不用管了吗?

4

1 回答 1

2

.NET DataContract 序列化程序在 DTO 上使用不同名称的标准方法是使用[DataMember]属性。如果您不想这样做,可以使属性名称与 QueryString 变量同名(不区分大小写)。

除此之外,您可以提供自己的自定义请求绑定器,或者您可以直接从服务或过滤器内部访问 QueryString:

var name = base.Request.QueryString["n"];

如果您对很多变量执行此操作,您可以包装从 QueryString 中提取并将请求 DTO 填充到过滤器属性中

于 2012-12-24T07:48:44.607 回答