WEB.API不会在POST方法中反序列化传入的JSON

时间:2018-09-25 07:32:18

标签: c# angular asp.net-core .net-core

我已经基于.Net-Core创建了Web.Api。有两种方法:

  1. IEnumerable GetRoles()-(获取)
  2. ResponseObject GetUsers(PagerRequest pagerRequest )-(发布)。它具有以下属性:[Route(“ api / users / getusers”)]     [HttpPost]

两个方法都被Angular调用。 GetRoles方法可以正常工作,但问题出在POST中。

PagerRequest是一个简单的类,具有一些int属性。它由Angular填充。 Fiddler显示正确的JSON:

POST http://localhost/Pir.API/api/users/getusers HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 84
Accept: application/json, text/plain, */*
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
content-type: application/json
Referer: http://localhost:4200/
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7

{
  "CountButtons": 5,
  "ItemsCount": 0,
  "PageSize": 5,
  "CurrentPageIndex": 0
}

GetUsers方法正在调用,但输入参数未初始化。换句话说,反序列化无法正常工作,我不明白为什么。

此项目之前基于经典.Net并在IIS中运行。运行正常。但是.Net CORE是一个问题。

谁知道问题出在哪里?

下面的代码示例:

-------------- PagerRequest.cs --------------------

public class PagerRequest
{
     public int ItemsCount { get; set; }
     public int PageSize { get; set; }
     public int CurrentPageIndex { get; set; }
     public int CountButtons { get; set; }
 }

-------------- PagerRequest.ts --------------------

export class PagerRequest{
    ItemsCount:number;
    PageSize:number;
    CurrentPageIndex:number;
    CountButtons:number;    
}

2 个答案:

答案 0 :(得分:4)

您需要告诉框架从请求主体读取数据。 使用FromBody Attribute

[HttpPost]
ResponseObject GetUsers([FromBody]PagerRequest pagerRequest)

注意:如果执行HttpPost,则名称GetUsers具有误导性。提示是要更改

答案 1 :(得分:0)

1)您缺少FromBody

2)使用api时的一个技巧是配置Swagger。 Swagger默认情况下会创建一个示例html,您可以在其中查看UI框架所需的请求主体类型(例如,参见此网址https://petstore.swagger.io,默认情况下,所有api端点都显示为html,我们可以看到该类型的请求)。

希望这会有所帮助。