【发布时间】:2021-03-24 14:01:15
【问题描述】:
Net core 应用程序和调用其他 .Net Core Web API 应用程序。我正在调用控制器方法如下
public async Task<T> SendRequest<T, U>(U request, string methodName, HttpMethod reqtype, string token)
{
T res = default(T);
try
{
string url = methodName;
string contentJson = JsonConvert.SerializeObject(request);
var content = new StringContent(contentJson, Encoding.UTF8, "application/json");
var actualRequest = new HttpRequestMessage(reqtype, url);
actualRequest.Content = content;
_httpClient.DefaultRequestHeaders.Clear();
_httpClient.DefaultRequestHeaders.Add("Authorization", token);
var rawData = await _httpClient.SendAsync(actualRequest);
var processedData = await rawData.Content.ReadAsStringAsync().ConfigureAwait(false);
res = JsonConvert.DeserializeObject<T>(processedData);
}
catch (Exception ex)
{
_reqHandler.RaiseBusinessException(MethodBase.GetCurrentMethod()?.DeclaringType?.DeclaringType?.Name
, MethodBase.GetCurrentMethod().Name,
"InputType: " + typeof(U) + " || OutputType: " + typeof(T) + " || Error Message: " + ex.Message);
}
return res;
}
以下是从 API 控制器返回的示例
return StatusCode(404, result.MapFileFileUploadSummary);
return StatusCode((int)System.Net.HttpStatusCode.Unauthorized);
在上面的代码中,当我返回一些状态码时,我想将它绑定到通用类型 T。例如我正在调用一个方法
_Client.SendRequest<ObjectResult, requestModel>()
我发送 ObjectResult 类型作为返回类型。例如,我在处理数据中得到以下响应,
"{\"type\":\"https://tools.ietf.org/html/rfc7235#section-3.1\",\"title\":\"Unauthorized\",\"status\":401,\"traceId\":\"00-e517f28f9c0b0441a8634c1c703a1cae-f64589d11056ad45-00\"}"
但无法绑定到
res = JsonConvert.DeserializeObject<T>(processedData);
这没有返回任何内容我在这里添加屏幕截图
这里 T 是 ObjectResult 类型。我在这里寻找通用响应类型,以便我可以始终将它绑定到类型 T。有人可以帮助我实现这个实现。任何帮助,将不胜感激。谢谢
【问题讨论】:
-
“无法绑定”是什么意思?代码应该根据我编译。还是运行时问题?
-
嗨 Arcord 我已经更新了我的问题。我要绑定 "{\"type\":\"tools.ietf.org/html/rfc7235#section-3.1\",\"title\":\"Unauthorized\",\"status\":401,\"traceId\":\"00- e517f28f9c0b0441a8634c1c703a1cae-f64589d11056ad45-00\"}" 到 JsonConvert.DeserializeObject
(processedData) 但我在上面添加了屏幕截图,状态代码为 null 我期待未经授权 -
如果我理解正确,我永远不会工作。例如,在您的对象 ObjectResult 中,状态代码的字段被命名为“StatusCode”,但在您的 JSON 中,它被命名为“status”(或“title”,取决于您是否需要代码或名称)。您应该创建一个与您的 JSON 对应的类,将 JSON 反序列化为该类型并映射到您的“ObjectResult”。
-
我知道我可以创建具有属性类型、标题、状态的自定义类,我可以发送“没关系”。它可能不会总是返回相同的响应。根据上面的示例,它会返回 Unauthorized 但在某些情况下它可能会返回实际数据,对吗?它返回什么数据取决于我的 API。所以我正在寻找某种方式来处理我想要处理的任何数据。有什么办法可以更好的处理?
-
好的,现在你的问题对我来说更清楚了......我会尝试制定一个答案:-)
标签: c# .net asp.net-core asp.net-core-mvc actionresult