【发布时间】:2018-01-24 22:03:15
【问题描述】:
我正在尝试将一些 JSON 发布到 web api .net 核心,但由于某种原因,无论我尝试了什么,这始终为空,请参阅下面的代码。
这是我的 .net 核心 web api 代码
[Produces("application/json")]
[Route("api/v1/Issues")]
[Authorize]
[EnableCors("AllowCors")]
public class IssuesController : Controller
{
[HttpPost]
public IActionResult PostIssues([FromBody] string issue)
{
//some code to desirialize
}
}
这就是我尝试通过 Angular 发布的方式(请注意已加载相应的服务)
public addIssue(issue) {
const headers = new Headers();
this.authService.getToken().toPromise().then( t => {
headers.append('Authorization', `Bearer ${t.toString()}`);
headers.append('Content-Type', 'application/json')
this.http.post(`${this.baseUrl}/v1/issues`, issue, {
headers: headers
}).toPromise()
.then(res => {
console.log(res.json());
});
});
}
我已尝试将帖子更改为
this.http.post(`${this.baseUrl}/v1/issues`, JSON.stringify(issue))
甚至
this.http.post(`${this.baseUrl}/v1/issues`, {'issue', JSON.stringify(issue)})
但似乎没有任何效果有人知道为什么会这样吗?
澄清在 API 上收到的string issue 始终为空。
这是我到达服务器时的成功响应,您可以看到请求有效负载不为空,但到达 Web api 时为空
更新 1 如果可能,需要解释 好吧,我想做一个小实验,相同的代码在 4.5 框架而不是 .net 核心上运行良好,但是我试图为 .net 核心做的工作是创建一个名为 foo 的类,见下文
public class Foo
{
public string Name { get; set; }
public string Json { get; set; }
}
并修改我的控制器以接受这个对象
[HttpPost]
public IActionResult PostIssues([FromBody] Foo issue)
{
Debug.Write(issue);
return Ok(issue);
}
以及我的Angular项目传递一个类似的格式体
public addIssue(issue) {
const headers = new Headers();
this.authService.getToken().toPromise().then( t => {
headers.append('Authorization', `Bearer ${t.toString()}`);
headers.append('Content-Type', 'application/json');
this.http.post(`${this.baseUrl}/v1/issues`, {'name' : 'name', 'json': JSON.stringify(issue)}, {
headers: headers,
withCredentials: true
}).toPromise()
.then(res => {
console.log(res.json());
});
});
}
为什么这可以但不能直接传递Json?为什么我的原始代码适用于 4.5 框架而不适用于 .net 核心?
【问题讨论】:
-
你在
PostIssues()返回什么?你的 JS 中issue的值是多少? -
我返回 Ok(去序列化问题),但我不明白为什么这会是一个问题,问题是我发布的 json 在 api 上被接收为 null
-
啊好吧 - 我以为你的意思是
res.json()是空的。您的客户请求是什么样的(来自 Fiddler 或开发工具)? -
我已按照您的要求发布了客户请求
-
我相信您的请求正文需要
issue属性。您是否尝试将其添加到请求正文中?
标签: c# angular asp.net-core asp.net-core-webapi