我试图在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。此代码导致内部服务器错误。这是为Get Request - http://localhost:60021/api/Base/GetDataTableForDocument?ListType=Distinct&TableName=PurchaseRequest&DataColumn=System.String[]&DataParam=System.String[]&RequiredColumn=System.String[]制作的url。
我的请求电话是-
可以将这些数组作为参数吗?如果是,怎么做?如果没有,为什么?另外,我不想创建一个类并传递它的对象。我搜索互联网已经有一段时间了,但是没有任何相关的东西出现。
发布于 2020-05-14 21:44:21
在客户机中,您似乎要将ListType作为查询参数传递,但在控制器操作中,您已经将其标记为“解析[FromBody]
”。首先,从操作中删除该属性。
这只是个开始。对于作为字符串数组的参数,一个常见的解决方案是用string.Join(",",DataColumn)
(或另一个字符,如果您的字符串包含逗号)构造一个逗号分隔的字符串,并且在控制器上可以使用DataColumn.Split(",")
再次将它们分开。
您是否尝试过调试API并一步一步地检查引发错误的位置?
顺便说一下,505不是Internal Server Error
。我怀疑是505 (Version not supported
)。此外,在您的.Result
调用中避免使用HttpClient。尝试将此方法声明为async
,并正确使用.GetAsync()
,并在其前面加上await
关键字。
https://stackoverflow.com/questions/61811454
复制相似问题