c# - 将 JSON 发送到 C# 中的 GET 方法
问题描述
我有一个带有如下控制器的 Web 服务:
[HttpGet]
[Customizing.RequestSizeLimit(1048576)] // 1 MB
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status422UnprocessableEntity)]
public async Task<IActionResult> ValidateTicketAsync([FromBody]KerberosTicketDto ticket)
{//code in here//}
Swagger 声明 Web 服务接受:
{
"ticket": "string"
}
从客户端,我得到一个 Kerberos 票并将其转换为字符串:
KerberosSecurityTokenProvider tokenProvider = new KerberosSecurityTokenProvider(ServiceServer, TokenImpersonationLevel.Identification);
KerberosRequestorSecurityToken token = tokenProvider.GetToken(TimeSpan.FromMinutes(1)) as KerberosRequestorSecurityToken;
...
tokenString = Convert.ToBase64String(token.GetRequest());
然后尝试将数据发送到 Web 服务器,并返回响应代码(即希望为 200):
WebClient webClient = new WebClient();
webClient.QueryString.Add("ticket", tokenString);
//webClient.QueryString.Add("spn", ServiceServer);
string result = webClient.DownloadString(urlTest);
然后调试窗口向我发送以下信息:
[10:40:21 DBG] Attempting to bind parameter 'ticket' of type 'Kerberos.TicketValidator.WebApi.Model.KerberosTicketDto' using the name 'ticket' in request data ...
[10:40:21 DBG] Rejected input formatter 'Microsoft.AspNetCore.Mvc.Formatters.JsonPatchInputFormatter' for content type 'null'.
[10:40:21 DBG] Rejected input formatter 'Microsoft.AspNetCore.Mvc.Formatters.JsonInputFormatter' for content type 'null'
Web 服务获取的参数似乎不是它预期的类型。
谁能帮我把它转换成正确的类型?或者如何首先将其作为正确的类型发送?
谢谢!
解决方案
我认为您需要将票作为对象发送,该对象具有称为ticket
not as string 的属性。
有了HttpClient
它可能会像下面这样。
var tokenJson = jsonSerializer.Serialise(new {token = tokenString });
using(var client = new HttpClient())
{
var req = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("some url"),
Content = new StringContent(tokenJson, Encoding.UTF8, ContentType.Json),
};
var res = await client.SendAsync(req).ConfigureAwait(false);
res.EnsureSuccessStatusCode();
var res = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
推荐阅读
- javascript - 无法从 Firebase 下载数据 - TypeError: undefined is not an object
- python - 无法对 DataFrame 中的第一列进行子集化
- php - 如何使用 Phpunit 测试 laravel Mailer
- javascript - 在拖动反应传单时获取当前坐标
- node.js - mongoose 模式中的 validator.isAlpha
- scala - 使用 Gradle jar 获取类未找到错误
- javascript - 如果没有发生替换,javascript字符串替换是否会创建一个新字符串?
- node.js - 为什么在不调试时定义了 process.debugPort?
- flutter - Flutter如何放置嵌套到页面中心
- docker - Kubectl 记录返回 tls 握手超时