【问题标题】:How to pass single object instead of multiple parameters in Web API C#如何在 Web API C# 中传递单个对象而不是多个参数
【发布时间】:2017-10-09 04:52:29
【问题描述】:

在我的 Web API 应用程序中,我想传递多个条件来过滤掉数据库中的数据。这些条件将从 UI 传递。

string dateRangeType = "XYZ", string startDate = "", string endDate = ""

那么如何将这 3 个参数组合成单个对象并在 C# 中的 Web API GET 方法中使用

【问题讨论】:

  • 怎么样??这完全取决于 Web API 如何接受参数。您需要向我们展示 Web API 的代码以及您如何调用 Web API 的代码。

标签: c# rest object asp.net-web-api asp.net-web-api2


【解决方案1】:

您可以创建一个模型类并将其用作 Web api 控制器的参数。例如:

public class MyDateDTO
{
    public String dateRangeType { get; set; }
    public String startDate { get; set; }
    public String endDate { get; set; }
}

Web api 控制器中的下一步

    [HttpGet]
    public String MyDateAction([FromUri]MyDateDTO dto)//must put FromUri or else 
        //the web api action will try to read the reference type parameter from
        //body
    {
        //your code
    }

还请注意,您必须输入 FromUri 才能从查询参数中读取引用类型对象,因为默认情况下,该操作将尝试从正文中读取它。更多详情here.

【讨论】:

    【解决方案2】:

    您可以在一个类中添加所有这 3 个属性,然后将该对象作为参数传递,然后使用 body 发布数据即可完成这项工作

    public class MyContract {
        public string dateRangeType;
        public string startDate;
        public string  endDate;
    }
    

    更改操作的签名以将 MyContract 对象作为具有 [FromBody] 属性的参数传递,然后像这样在请求正文中将数据作为 JSON 传递 -

    {
       dateRangeType: "abc",
       startDate: "2017-09-10",
       endDate: "2017-09-11"
    }
    

    【讨论】:

    • 我们可以为 GET 做这个吗?
    • 是的,您也可以使用 GET 传递正文参数,理想情况下您应该使用 POST,但使用 GET 也可以
    • 请参阅 stackoverflow.com/questions/978061/http-get-with-request-body 了解为什么您不应该这样做,尽管您可以这样做。
    • @sprinter252 是的,完全正确。
    【解决方案3】:

    在 Get 中你不能传递单个对象,为此你需要将方法转换为 POST 方法。 WebApi 通过 FormFactory 和 JSON Factory 接受数据。这两个将请求数据转换为对象仅用于发布而不用于 GET。对于 GET,我们只需要与方法输入参数一样单一的参数。您还可以检查遵循相同方法的 Model Binder。

    【讨论】:

    • 这并不能完全回答问题。您可以通过 cmets 共享此信息。
    • @VijayRaheja 我只想在 GET 中执行此操作,还有其他选择吗?
    • @Vijay 不需要POST,Kcs看我的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多