Web API发布给我错误

时间:2018-08-10 12:18:26

标签: asp.net asp.net-web-api

我有一个Web API应用程序。我应该在端点上发表文章。当我在邮递员中尝试我的API控制器时,我收到错误消息“

  

请求的资源不支持HTTP'POST'

我是Web API的新手,欢迎任何帮助和建议。

这是我的模型课:

     namespace Products.Models
      {
         public class Prouct

          {

         public string ProductID { get; set; }
         public string ProductName { get; set; }
         public string ProductPrice { get; set; }
         public string VoucherID { get; set; }

          }
        }

这是我的控制器类

[RoutePrefix("api/products")]

public class ProductsController : ApiController
 {


        static HttpClient client = new HttpClient();


    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }


    public string Get(int id)
    {
        return "value";
    }

    [Route("products")]
    public async Task PostAsync(string ProductID, string ProductName, string ProductPrice,
        string VoucherID)
    {

        Products p = new Products();
        p.ProductID = ProductID;
        p.ProductName = ProductName;
        p.ProductPrice = ProductPrice;
        p.VoucherID = VoucherID;

        var client = new HttpClient { BaseAddress = new 
                   Uri("http://localhost:51613/") };
        var response = await 
        client.PostAsJsonAsync("api/products", 
        p);
        if (response.IsSuccessStatusCode)
        {

        }

     public void Put(int id, [FromBody]string value)
    {
    }


    public void Delete(int id)
    {
    }

3 个答案:

答案 0 :(得分:0)

您需要在HttpPost方法上指定PostAsync。默认情况下为[HttpGet]

[HttpPost]
[Route("products")]
public async Task PostAsync(string ProductID, string ProductName, string ProductPrice, string VoucherID)
{
    // implementation
}

答案 1 :(得分:0)

好像您陷入了循环。为什么PostAsync方法在被调用后会自行调用?这将导致无休止的请求循环。

var client = new HttpClient { BaseAddress = new Uri("http://localhost:51613/") };

这与[HttpPost]属性是必需的事实无关。

答案 2 :(得分:0)

请注意您应该使用[FromBody]。同样在Postman(附有图像)中,您必须选择产品json,类型为JSON(application.json)的“原始”数据。

 [HttpPost]
    [Route("products")]       
    public  async Task  PostAsync([FromBody] Products p)
    {
        var client = new HttpClient
        {
            BaseAddress = new
                   Uri("http://localhost:51613/")
        };
        var response = await
        client.PostAsJsonAsync("api/products",
        p);
        if (response.IsSuccessStatusCode)
        {

        }

    }

Postman