找到了与请求uri匹配的nohttp资源

时间:2017-09-28 09:48:03

标签: asp.net-web-api

我正在尝试开发一个api,允许在同一地址发送和发布请求。

public class DataController : ApiController
{

   [HttpGet]
   public DataResponse Foo()
   {
     return GetNext();
   }

   [HttpPost]
   public void Foo(long p1, string p2)
   {
     SaveValue(p1,p2);
   }
}

GET运行正常。调用POST方法时,出现以下错误:

  

请求的资源不支持http方法'POST'

enter image description here

我的WebApiConfig如下所示:

public static class WebApiConfig
  {
    public static void Register(HttpConfiguration config)
    {
      config.EnableCors();
      config.MapHttpAttributeRoutes();
      config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
      config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{action}");
    }
  }

知道我需要改变什么才能让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点 -

1-更改您调用API的方式,即传递url中的值,如<url>?p1=value&p2=value

2-将Web API中的Action的签名更改为

public void Foo([FromBody] MyContract data)

其中MyContract是一个具有两个属性的类

public class MyContract
{
    public long p1 { get; set; }
    public string p2 { get; set; }
}

这是因为默认情况下,参数绑定是通过URL完成的,并且您将它们传递给正文。