【问题标题】:How to pass multiple array in get api without creating class object c#如何在get api中传递多个数组而不创建类对象c#
【发布时间】:2020-05-15 03:53:21
【问题描述】:

我正在尝试将多个数组从一个项目传递到 c# 中的另一个 api 项目。

这是我调用项目的方法 -

public DataTable GetDataTableForDocument(string ListType, string TableName, string[] DataColumn, string[] DataParam, string[] RequiredColumn)
    {
        DataTable lstTable = new DataTable();
        var baseAddress = "Base";
        using (HttpClient client = LocalUtility.InitializeHttpClient(baseAddress))
        {
            HttpResponseMessage response = client.GetAsync(baseAddress + "/GetDataTableForDocument?ListType=" + ListType + "&TableName=" + TableName + "&DataColumn=" + DataColumn + "&DataParam=" + DataParam + "&RequiredColumn=" + RequiredColumn).Result;
            if (response.IsSuccessStatusCode)
            {
                var data = response.Content.ReadAsStringAsync().Result;
                lstTable = JsonConvert.DeserializeObject<DataTable>(data);
            }
        }
        return lstTable;
    }

这是我的api项目方法-

[HttpGet]
    [Route("api/Base/GetDataTableForDocument")]
    public IHttpActionResult GetDataTableForDocument(string ListType, string TableName, string[] DataColumn, string[] DataParam, string[] RequiredColumn)
    {
        return Ok(_repository.GetDataTableForDocument(ListType, TableName, DataColumn, DataParam, RequiredColumn));
    }

我收到错误 500。此代码导致的内部服务器错误。 这是为获取请求制作的网址 - http://localhost:60021/api/Base/GetDataTableForDocument?ListType=Distinct&TableName=PurchaseRequest&DataColumn=System.String[]&DataParam=System.String[]&RequiredColumn=System.String[]

我的请求电话是 -

是否可以将这些数组作为参数?如果是,如何?如果不是,为什么?另外我不想创建一个类并传递它的对象。 我已经在互联网上搜索了一段时间,但没有任何相关信息出现。

【问题讨论】:

  • 您不想实例化一个对象?或者你不想要一个静态类?您应该添加一些详细信息,说明您的问题到底是什么,以及您尝试了什么。否则,这感觉就像一个不完整的问题,你不会(可能)得到很好的答案。
  • 感谢@AustinTFrench。我不想在 api 中传递对象。我的问题是我的 API 给出了内部服务器错误的响应。

标签: c# api asp.net-web-api get


【解决方案1】:

您似乎在客户端中将 ListType 作为查询参数传递,但在控制器操作中您已将其标记为已解析 [FromBody]。首先,从动作中移除这个属性。

这仅仅是个开始。对于字符串数组的参数,一个常见的解决方案是用string.Join(",",DataColumn)(或另一个字符,如果你的字符串包含逗号)构造一个逗号分隔的字符串,然后在控制器上你可以用DataColumn.Split(",")再次分隔它们。

您是否尝试过调试 API 并逐步检查引发错误的位置?

顺便说一句,505 不是Internal Server Error。我怀疑它是 505 (Version not supported)。 此外,请避免在 HttpClient 调用中使用 .Result。尝试将此方法声明为async 并正确使用.GetAsync(),并在其前加上await 关键字。

【讨论】:

  • 谢谢@Sotiris。我在复制代码时犯了一些错误。首先我已经删除了 [FromBody] 第二个代码是 500 而不是 505。我的其他请求在 HttpClient 调用中使用 .result 工作正常。但是我没有得到你的 string.join 部分。会调查的。编辑了我的问题。
【解决方案2】:

一般来说这是可能的,但这是一个糟糕的主意, 类似:

clickMe

你可以通过jsonApi

但总的来说,我不得不说这是一个糟糕的主意。 DTO pattern 非常适合大多数 RestAPI,从长远来看具有巨大的优势:更容易扩展、更简洁(= 更好地阅读和理解)、更智能的错误处理......

【讨论】:

  • 如果您提供带有附加信息的链接,您应该简要总结与问题相关的部分。链接可能会过期,您的回答将不再有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 2021-09-14
相关资源
最近更新 更多