【问题标题】:Refit - Use refit parameters (string) to pass as controller parametersRefit - 使用 refit 参数(字符串)作为控制器参数传递
【发布时间】:2022-01-16 19:24:56
【问题描述】:

有没有办法使用Refit动态输入参数?

我的改装界面中有这段代码:

      [Get("/click?{parm}")]
      Task<ApiResponse<TAny>> SaveClick(string parm);

parm 的值为:

        "id=1234&x=567"

我的路线:

        [HttpGet]
        [Route("click")]
        public  void test ([FromQuery] string id)
        {
            Ok("Ok");
        }

我得到的只是 id 参数的值为空。预期结果将是一个值为 "1234"

的字符串

任何帮助:D?

【问题讨论】:

  • 我不知道改装,但以下不会帮助[Route("click/{id}")]吗?
  • 不幸的是,我无法访问用于发送数据的路由,问题是我不知道路由期望什么参数......这就是为什么我将它们作为字符串传递( "id=1234&x=567"),因此在这种情况下无法修改 {X}{Y}
  • 可能是打字问题。尝试将它们包装成一个字符串! id="1234"&amp;x="567" ...见stackoverflow.com/questions/49741284/…
  • 现在我将只使用旧的 httpClient... 至少这个可以正常工作:(

标签: c# asp.net-core refit


【解决方案1】:

https://github.com/reactiveui/refit#dynamic-querystring-parameters

您可以使用带有所需参数的自定义 POCO 类,也可以使用 Dictionary&lt;string,string&gt; 来传递值。该字典似乎最适合您的用例。

public class MyQueryParams
{
    [AliasAs("order")]
    public string SortOrder { get; set; }

    public int Limit { get; set; }

    public KindOptions Kind { get; set; }
}

public enum KindOptions
{
    Foo,

    [EnumMember(Value = "bar")]
    Bar
}


[Get("/group/{id}/users")]
Task<List<User>> GroupList([AliasAs("id")] int groupId, MyQueryParams params);

[Get("/group/{id}/users")]
Task<List<User>> GroupListWithAttribute([AliasAs("id")] int groupId, [Query(".","search")] MyQueryParams params);


params.SortOrder = "desc";
params.Limit = 10;
params.Kind = KindOptions.Bar;

GroupList(4, params)
>>> "/group/4/users?order=desc&Limit=10&Kind=bar"

GroupListWithAttribute(4, params)
>>> "/group/4/users?search.order=desc&search.Limit=10&search.Kind=bar"

如果使用字典,也会出现类似的行为,但没有 AliasAs 属性的优势,当然也没有智能感知和/或类型安全性。

编辑:您可能可以使用HttpUtility.ParseQueryString 将您的字符串解析为 NameValueCollection,它基本上是一个字典。

【讨论】:

  • 您好亚历克斯,感谢您的帮助!所以,我只是用这种方式进行了测试,它可以工作!谢谢!尽管如此,这里更大的问题是我们需要将值作为对象“Prop1:Value1,Prop2:Value”传递......我试图到达的端点不在我的域中,所以我不确定道具的名称将是“Prop1,Prop2”...正如您所说,使用 Dictionary 它可以工作,但我必须将字符串 ("id=1234&x=567") 解析为 Key:id Value:1234 ----键:x 值:567 我看到的方式,有点糟糕......应该更容易作为我之前尝试过的例子 ([Get("/click?{parm}")]) :(
  • 您可能可以使用HttpUtility.ParseQueryString 将您的字符串解析为一个NameValueCollection,它基本上是一个字典。总的来说,您使用 Refit 的核心功能越来越少,因此默认的 HttpClient 也可能是可行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多