将 C# 对象发送到 webapi 控制器
Posted
技术标签:
【中文标题】将 C# 对象发送到 webapi 控制器【英文标题】:Sending C# object to webapi controller 【发布时间】:2013-10-26 19:23:28 【问题描述】:我正在尝试将 C# 对象传递给 Web api 控制器。该 api 被配置为存储发布给它的 Product 类型的对象。我已经使用 Jquery Ajax 方法成功添加了对象,现在我试图在 C# 中获得相同的结果。
我创建了一个简单的控制台应用程序来向 api 发送 Post 请求:
public class Product
public int Id get; set;
public string Name get; set;
public string Category get; set;
public decimal Price get; set;
static void Main(string[] args)
string apiUrl = @"http://localhost:3393/api/products";
var client = new HttpClient();
client.PostAsJsonAsync<Product>(apiUrl, new Product() Id = 2, Name = "Jeans", Price = 200, Category = "Clothing" );
postproduct方法永远不会被调用,如何将这个对象发送给控制器?
添加项目的方法:
public HttpResponseMessage PostProduct([FromBody]Product item)
item = repository.Add(item);
var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item);
string uri = Url.Link("DefaultApi", new id = item.Id );
response.Headers.Location = new Uri(uri);
return response;
【问题讨论】:
您的代码看起来不错,您在 fiddler 中看到了什么?您是否在服务器上启用了 webapi 跟踪? 我可以看到源自我正在使用的表单的请求,在 Fiddler 中没有可见 HttpClient 发送的请求。我还将 api 上传到:producttestapi.azurewebsites.net/api/products,但来自 HttpClient 的请求也没有到达该 api。 另外,检查那个 url 的 index.html,这是我用来通过 ajax 发送对象的形式,它可以工作,所以 api 没问题。 【参考方案1】:看起来您以某种方式禁止接受 JSON 作为发布格式。我能够将数据发送到您的端点并使用application/x-www-form-urlencoded
创建新产品。这可能就是您的 jQuery 请求的执行方式。
你能展示你的 web api 的配置代码吗?您是否更改了默认格式化程序?
或者您可以从 HttpClient 发送表单。例如
string apiUrl = "http://producttestapi.azurewebsites.net/api/products";
var client = new HttpClient();
var values = new Dictionary<string, string>()
"Id", "6",
"Name", "Skis",
"Price", "100",
"Category", "Sports"
;
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync(apiUrl, content);
response.EnsureSuccessStatusCode();
【讨论】:
ajax 方法定义了 'dataType: "json"'。所以这让我认为控制器仍然接受 JSON 作为数据。我添加了处理将新对象添加到列表的方法。我会显示配置代码,它是 App_Start 文件夹中的 .cs 文件吗?同时,打算试试你在这里发布的方法。 我还可以使用您提供的代码使用 PostAsJson 方法,现在它可以工作了。非常感谢您,先生! 如果类中有字符串数组这样的参数,我们可以做什么。我无法将其设置为 Dictionary 因为 FormUrlEncodedContent 不接受 Dictionary以上是关于将 C# 对象发送到 webapi 控制器的主要内容,如果未能解决你的问题,请参考以下文章
C# WebApi 通过 body 从 C# MVC 接收 json
如何从不带引号的 WebAPI 控制器发送带有 javascript 函数的 JSON