Elm*_*ega 4 angularjs asp.net-core
发布到 aspnetcore api 时,我收到 415 http 错误结果。如果我的端点标记为 [HttpPost] 而不是 [HttpDelete],则不会发生这种情况
在 aspnetcore api 控制器中:
[HttpDelete]
public async Task<IActionResult> Delete([FromBody]EntityViewModel vm)
{
Run Code Online (Sandbox Code Playgroud)
在角度控制器中:
var obj = new Object();
obj.atr1 = 1;
obj.atr2 = 2 ;
$http.post(route, obj)
.then(function (response) {
Run Code Online (Sandbox Code Playgroud)
实体视图模型.cs
public class EntityViewModel
{
public int Atr1 { get; set; }
public int Atr2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
先读了你的问题,我有点困惑......
为什么 a$http.post用于发出 DELETE 请求?为什么$http.delete不用于此目的?然后我阅读了有关 AngularJS 的更多信息$http.delete,发现您无法将正文发送到服务器。然后我问自己,为什么你可以在 DELETE 请求中发送一个正文。这里有一个很好的问题:HTTP DELETE 请求是否允许实体主体?- 规范允许带有正文数据的 DELETE 请求。
使长话短说...
ASP.NET Core 可以处理带有在正文中发送的 JSON 数据的 DELETE 请求。所以控制器部分是有效的。
[HttpDelete]
public async Task<IActionResult> Delete([FromBody]EntityViewModel vm)
{
Run Code Online (Sandbox Code Playgroud)
为了避免状态代码 415(不支持的媒体类型),将 Header 字段Content-Type设置为 非常重要application/json。我在以 Postman 作为客户端的实验中忘记了这一点,并且也得到了 415 状态代码。
对于 AngularJS 部分,我建议使用
var obj = new Object();
obj.atr1 = 1;
obj.atr2 = 2 ;
$http(
{
method: 'DELETE',
url: route,
headers: {
'Content-Type': 'application/json'
},
data: obj
}
).then(function (response) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3706 次 |
| 最近记录: |