【问题标题】:Post data in asp.net web API with header在带有标题的 asp.net Web API 中发布数据
【发布时间】:2016-04-18 22:52:45
【问题描述】:

大家好,我是 Asp.net Web API 的新手,我的问题 post data using asp.net Web API 被接受了。

这是对我想在邮递员中发布带有一些标头值的数据的同一问题的扩展,我的代码如下

public HttpResponseMessage PostCustomer([FromBody] NewUser userData, string devideId)
{
    //My code 
    return response;
}

当我在 Postman 中以 JSON 格式在 BODY 中传递值时,我收到如下消息

未找到与请求 URI 匹配的 HTTP 资源 在与请求匹配的控制器上未找到任何操作。

请帮帮我。

【问题讨论】:

  • 显示您的路由配置以及您发送此请求的具体方式。

标签: asp.net-web-api


【解决方案1】:

您似乎在操作中添加了一些额外的devideId 字符串参数。确保在发出请求时将值作为查询字符串提供给它:

POST http://localhost:58626/api/customers?devideId=foo_bar

如果您不想将此参数设为必需,则应将其设为可选(就 .NET 中的可选方法参数而言):

public HttpResponseMessage PostCustomer([FromBody] NewUser userData, string devideId = null)
{
    ...
}

现在您可以 POST 到 http://localhost:58626/api/customers 而无需为此参数提供值。

备注:您不需要用[FromBody] 属性来装饰复杂的对象类型(例如NewUser)。这是 Web API 中的默认行为。


更新:以下是读取自定义标题的方法:

public HttpResponseMessage PostCustomer(NewUser userData)
{
    IEnumerable<string> values;
    if (this.Request.Headers.TryGetValues("X-MyHeader", out values))
    {
        string headerValue = values.FirstOrDefault();
    }

    ...

    return response;
}

【讨论】:

  • 我如何从标头中读取并获取标头值,而不是作为参数传递?
  • 通过在您的代码中使用Request.Headers 集合,更具体地说是在其上使用TryGetValues 方法。我已经更新了我的答案,用一个例子来说明它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 2017-07-05
相关资源
最近更新 更多