首页 > 解决方案 > 在 Web api 中使用 FormUrlEncoded 或 Json 发布数据

问题描述

我创建了通用方法,我们通过该方法将数据发布到 Web api。在发布时,我将数据序列化为 json。下面是我的通用方法。

public HttpResponseMessage GetData<T>(T parm, string url) where T : class
        {
            try
            {
                var client = new HttpClient();

                var result = client.PostAsync(url, SerializeData<T>(parm));

                result.Wait();

                if (result.Result.IsSuccessStatusCode)
                {
                    // Do something
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }

            return default(HttpResponseMessage);
        }

 private StringContent SerializeData<T>(T obj)
        {
            string mediaType = "application/json";

            string content = JsonConvert.SerializeObject(obj, formatter);

            return new StringContent(content, Encoding.UTF8, mediaType);
        }

如果我从调用者方法传递类对象,这工作正常

var result = service.GetData<MyClass>(myclassobj,url);

但是,对于某些通过类对象传递的 url 不起作用。因此,我们编写了另一种方法,以FormUrlEncodedContent格式发布数据,如下所示,它工作正常。

var Parameters = new Dictionary<string, string> { { "Key1", "some value" }, { "Key2", "another value" } };
var EncodedContent = new FormUrlEncodedContent(Parameters);
var postTask = _client.PostAsync(url, EncodedContent);

我试图将 FormUrlEncoded 数据发送到 JSON 方法,并通过更改媒体类型。但无法正确序列化它。我们使用的 api/服务来自第三方提供商。

所以我的问题是需要对适用于所有格式(如 JSON、FormUrlEncodedContent 等)的方法进行哪些更改。

此外,它是否取决于 api 的写入方式,它们仅适用于特定格式,如 JSON、FormUrlEncodedContent 等。

基本上,我试图保留一种支持所有格式的通用方法。

对此的任何帮助表示赞赏!

标签: c#asp.net-web-apiasp.net-coreasp.net-core-webapi

解决方案


推荐阅读