大家好,我是Asp.net-web-api
新手,我想了解一个特定项目的细节,其中item_Code必须以邮递员的标题或json格式传递。
我是这样做的
public List<Product> GetByCode(string ItemCode)
{
using (var context = new DBContext())
{
var getItem = (from s in context.objProduct where (s.ItemCode == ItemCode) select s).ToList();
if (getItem!=null )
{
return getItem;
}
else
{
return null;
}
}
}
如果我是通过查询字符串这样做的,如
localhost:50787/API/Product/GetByCode?ItemCod=3F-47-AB-84-9F-EB-D6-6B-9C-62-CC-85-98-4D-28-6B
让它正常工作。但我希望它必须通过带有键和值的JSON或Header传递。
请帮帮我。
发布于 2016-04-19 12:40:01
首先,您需要将请求发送到您的端点。要做到这一点,您需要使用[HttpPost]
属性编辑操作。
[HttpPost]
public List<Product> GetByCode(string ItemCode) {...}
我还建议更改该操作的名称,因为将some发布到GetByCode
可能会导致与其名称有一些混淆。
完成之后,现在让我们来关注如何将数据发送到端点。
发送一篇文章到行动中,比如
POST localhost:50787/API/Product/GetByCode?ItemCod=3F-47-AB-84-9F-EB-D6-6B-9C-62-CC-85-98-4D-28-6B HTTP/1.1
User-Agent: Fiddler
Host: localhost:50787
会起作用的,但你说
但我希望它必须通过带有键和值的JSON或Header传递。
通过标题传递它将需要您做更多的工作。
以此请求为例,在自定义头中发送代码。
POST localhost:50787/API/Product/GetByCode HTTP/1.1
User-Agent: Fiddler
Host: localhost:50787
ItemCode: 3F-47-AB-84-9F-EB-D6-6B-9C-62-CC-85-98-4D-28-6B
您必须自定义API以查找特定的标头键,然后将其映射到预期的操作参数。比你真正需要做的工作还要多。
要将其作为JSON主体发送,并让它仍然以简单的类型调用您的操作,您需要更新您的操作,以了解如何处理请求。
[HttpPost]
public List<Product> GetByCode([FromBody]string ItemCode) {...}
注意[FromBody]
属性。
使用 FromBody
若要强制Web从请求体读取简单类型,请将FromBody属性添加到参数中:
在上面的示例中,Web将使用媒体类型的格式化程序从请求体读取ItemCode
的值。下面是一个客户端请求示例。
POST localhost:50787/API/Product/GetByCode HTTP/1.1
User-Agent: Fiddler
Host: localhost:50787
Content-Type: application/json
Content-Length: 49
"3F-47-AB-84-9F-EB-D6-6B-9C-62-CC-85-98-4D-28-6B"
来源:ASP.NET Web中的参数绑定
发布于 2016-04-19 08:23:33
你可以做这样的事。
为模型创建一个类:
public class Item
{
public string Code {get;set;}
}
然后像这样改变你的控制器:
[HttpPost]
public List<Product> GetByCode([FromBody]Item item)
{
using (var context = new DBContext())
{
var getItem = (from s in context.objProduct where (s.ItemCode == item.Code) select s).ToList();
if (getItem!=null )
{
return getItem;
}
else
{
return null;
}
}
}
希望它有帮助:)
https://stackoverflow.com/questions/36709027
复制相似问题