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

Ufu*_*arı 6 routing servicestack

我试图找到一种方法来获取此查询字符串中的值到我的DTO对象.

example.org?code=abc
Run Code Online (Sandbox Code Playgroud)

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

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

由于这是一个回调网址,我没有机会更改它.我怎么能做到这一点?

myt*_*thz 11

在ServiceStack的路由上阅读此前面的答案.路由应该只包含/path/info它们永远不应该包含的queryString,它们可以自动填充所有请求DTO.

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

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

你可以已经与填充它:/registration?code=abc.

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

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

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

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