首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取特定项的Asp.Net Web

获取特定项的Asp.Net Web
EN

Stack Overflow用户
提问于 2016-04-19 05:05:58
回答 2查看 585关注 0票数 1

大家好,我是Asp.net-web-api新手,我想了解一个特定项目的细节,其中item_Code必须以邮递员的标题或json格式传递。

我是这样做的

代码语言:javascript
运行
复制
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传递。

请帮帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-19 12:40:01

首先,您需要将请求发送到您的端点。要做到这一点,您需要使用[HttpPost]属性编辑操作。

代码语言:javascript
运行
复制
[HttpPost]
public List<Product> GetByCode(string ItemCode) {...}

我还建议更改该操作的名称,因为将some发布到GetByCode可能会导致与其名称有一些混淆。

完成之后,现在让我们来关注如何将数据发送到端点。

发送一篇文章到行动中,比如

代码语言:javascript
运行
复制
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传递。

通过标题传递它将需要您做更多的工作。

以此请求为例,在自定义头中发送代码。

代码语言:javascript
运行
复制
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主体发送,并让它仍然以简单的类型调用您的操作,您需要更新您的操作,以了解如何处理请求。

代码语言:javascript
运行
复制
[HttpPost]
public List<Product> GetByCode([FromBody]string ItemCode) {...}

注意[FromBody]属性。

使用 FromBody

若要强制Web从请求体读取简单类型,请将FromBody属性添加到参数中:

在上面的示例中,Web将使用媒体类型的格式化程序从请求体读取ItemCode的值。下面是一个客户端请求示例。

代码语言:javascript
运行
复制
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中的参数绑定

票数 1
EN

Stack Overflow用户

发布于 2016-04-19 08:23:33

你可以做这样的事。

为模型创建一个类:

代码语言:javascript
运行
复制
public class Item
{
    public string Code {get;set;}
}

然后像这样改变你的控制器:

代码语言:javascript
运行
复制
[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;
        }
    }
}

希望它有帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36709027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档