我已经基于.Net-Core创建了Web.Api。有两种方法:
两个方法都被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;
}
答案 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,我们可以看到该类型的请求)。
希望这会有所帮助。