当前位置: 首页 > 知识库问答 >
问题:

WebAPI问题:用于将客户对象从客户端传递到操作

幸越泽
2023-03-14

我试图通过web api执行粗鲁的操作。所以我把客户json从客户端传递到web api操作。

这是我从客户端传递给操作的json。

{"CustomerID":"James","CompanyName":"jame pvt","ContactName":"James","ContactTitle":"Sr Developer","Address":"Salt lake","Region":"sect-1","PostalCode":"700009","City":"kolinara","Country":"India","Phone":"033-8547-4789","Fax":"033-8547-4781"}
    [RoutePrefix("api/customer")]
    public class CustomerController : ApiController
    {
    [HttpPost, Route("AddCustomer")]
            public HttpResponseMessage PostCustomer(Customer customer)
            {
                customer = repository.Add(customer);
                var response = Request.CreateResponse<Customer>(HttpStatusCode.Created, customer);
                response.ReasonPhrase = "Customer successfully added";
                string uri = Url.Link("DefaultApi", new { customerID = customer.CustomerID });
                response.Headers.Location = new Uri(uri);
                return response;
            }
}
private async void btnAdd_Click(object sender, EventArgs e)
        {
            Customer oCustomer = new Customer
            {
                CustomerID = "James",
                CompanyName = "James pvt",
                ContactName = "James",
                ContactTitle = "Sr Developer",
                Address = "Salt lake",
                Region = "sect-1",
                PostalCode = "700009",
                City = "Kolinara",
                Country = "India",
                Phone = "033-8547-4789",
                Fax = "033-8547-4781"
            };

            var fullAddress = "http://localhost:38762/api/customer/AddCustomer";

            try
            {
                using (var client = new HttpClient())
                {
                    var serializedCustomer = JsonConvert.SerializeObject(oCustomer);
                    var content = new StringContent(serializedCustomer, Encoding.UTF8, "application/json");

                    using (var response = client.PostAsync(fullAddress, content).Result)
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            var customerJsonString = await response.Content.ReadAsStringAsync();
                            //_Customer = JsonConvert.DeserializeObject<IEnumerable<Customer>>(customerJsonString);
                        }
                        else
                        {
                            Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                            var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.Content.ReadAsStringAsync().Result);
                            MessageBox.Show(dict["Message"]);
                        }
                    }
                }
            }
            catch (HttpRequestException ex)
            {
                // catch any exception here
            }
        }

这是我得到的错误信息,当我做同样的事情从小提琴手。

{“Message”:“请求包含实体正文,但没有内容类型标头。此资源不支持推断的媒体类型“application/octet stream”。”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“application/octet stream”的内容中读取“Customer”类型的对象。”,“ExceptionType”:“System.Net.Http.UnsupportedMediaTypeException”,“StackTrace”:“在System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent内容,类型,IEnumerable1格式化程序,IFormatterLogger格式化程序记录器,CancellationToken CancellationToken)\r\n在System.Net.Http.HttpContentExtensions.Readasync(HttpContent内容、类型、IEnumerable1格式化程序、IFormatterLogger格式化程序记录器、CancellationToken CancellationToken)\r\n在系统中。网状物Http。模型绑定。FormatterParameterBinding。ReadContentAsync(HttpRequestMessage请求,类型类型,IEnumerable`1格式化程序,IFormatterLoggerhtml" target="_blank">格式化程序记录器,CancellationToken CancellationToken)“}

现在请告诉我我的代码中有什么错误,我得到了错误。

谢啦

共有1个答案

詹钊
2023-03-14

当然,这个错误是因为没有将内容类型设置为:application/json。我用这种方式实现了我的代码。

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:38762/api/customer/AddCustome");
client.DefaultRequestHeaders
  .Accept
  .Add(new MediaTypeWithQualityHeaderValue("application/json"));

 HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,"relativeAddress");
 var serializedCustomer = JsonConvert.SerializeObject(oCustomer);
                var content = new StringContent(serializedCustomer, Encoding.UTF8, "application/json");
  request.Content = content;
  client.SendAsync(request)
  .ContinueWith(responseTask =>
  {
      Console.WriteLine("Response: {0}", responseTask.Result);
  });
 类似资料:
  • 问题内容: 我有一个很大的对象,需要将其传递给客户端脚本中的函数。我尝试使用JSON.stringify,但是这种方法遇到了一些问题- 主要与性能有关。是否可以在ejs中执行类似的操作? 在我的客户端脚本中,我会将这个对象传递给类似这样的函数 当我尝试这个我得到 要么 问题答案: 那是预期的行为。您的模板引擎正在尝试从对象创建一个字符串,该字符串会导致[Object object]。如果您真的想要

  • 嘿,伙计们,我目前已经实现了一个路线,负责根据他的请求从我的服务器上检索信息,现在我有兴趣将我的对象转移到坐在我视图中的客户端脚本。我可以使用Res.Render传输对象吗?

  • 问题内容: 我在服务器上有一个非常重量级的查询,它会生成新的页面渲染,并且我想将查询的一些结果传递给客户端(作为对象的javascript数组)。基本上是这样,因此我不必稍后再进行单独的JSON查询即可获得相同的内容(通常是静态的)。数据最终将是有用的,但最初没有用,因此我没有将其直接放入文档中。 数据是一个对象数组,最初只使用一些对象。我想传递整个数据或传递一些子集(取决于情况)。我的玉看起来像

  • 问题内容: 我遇到了一些问题,无论何时渲染视图,我都试图发送一个对象供我的Javascript客户端使用。我以这种方式发送(我正在使用车把) //然后在我的视图中,在脚本标签内,我尝试获取该var并进行打印 结果是这样的: 而且我不能使用它的任何属性,因为它是未定义的 问题答案: 您可以将对象作为字符串发送。 喜欢 在客户端,您可以解析它以获取对象 喜欢 现在您可以使用loc作为对象。

  • 尝试使用Express将参数从服务器端传递到Node.js中的客户端。 但到目前为止什么都没起作用。你们要怎么做?非常感谢你的帮助:)

  • 我正在尝试重建一个与elasticsearch 2.4对话的插件,以便与elasticsearch 5配合使用。 代码来自:https://github.com/pentaho/pentaho-kettle/blob/master/plugins/elasticsearch-bulk-insert/src/org/pentaho/di/trans/steps/elasticsearchbulk/E