6

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

example.org?code=abc

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

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

由于这是一个回调 URL,我没有机会更改它。我怎样才能做到这一点?

4

1 回答 1

11

在 ServiceStack 的 Routes 上阅读这个较早的答案。路由应该只包含/path/info它们不应该包含能够自动填充所有请求 DTO 的 queryString。

如果您的 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"];
    }
}
于 2013-03-17T16:15:02.887 回答