将查询字符串中的参数值映射到DTO属性

时间:2013-03-17 15:49:57

标签: routing servicestack

我正在尝试找到一种方法来将此查询字符串中的值传递给我的DTO对象。

example.org?code=abc

我必须将代码值映射到AuthorizationCode属性(参数名称也不匹配)。我试过像这样的路由,但它没有用。

[Route("?code={AuthorizationCode}", "GET")]
public class Registration
{
    public string AuthorizationCode { get; set; }
}

由于这是一个回调网址,因此我没有机会对其进行更改。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:10)

早些阅读answer on ServiceStack's Routes。路由应该只包含它们永远不应包含queryString的/path/info,它们可以自动填充所有请求DTO。

如果你在DTO中只有一个代码属性,如:

[Route("/registration", "GET")]
public class Registration
{
    public string Code { get; set; }
}

您可以使用以下代码填充:/registration?code=abc

否则,如果您想坚持使用queryString和DTO的不同名称,可以尝试通过将您的DTO注释为[DataContract]来创建别名:

[Route("/registration", "GET")]
[DataContract]
public class Registration
{
    [DataMember(Name="code")]
    public string AuthorizationCode { get; set; }
}

无论哪种方式,您都可以直接在您的服务或过滤器中访问QueryString:

public MyService : Service 
{
    public object Post(Registration request) 
    {
        var code = base.Request.QueryString["code"];
    }
}