我有一个用angular和TypeScript编写的前端WebAPI,看起来像这样.
removeSubset(id: number): ng.IPromise<any> {
return this.$http.post(this.api + '/DeleteStudySubset', id)
.then(this.returnData);
}
returnData = (response: any) => {
return response.data;
};
它调用的后端版本是这样写的
[HttpPost]
[ResponseType(typeof(IHttpActionResult))]
public async Task<IHttpActionResult> DeleteStudySubset(int id)
{
await _subsetRepo.DeleteStudySubset(id);
return Ok();
}
起初,我遇到了URI 404错误,我一生都无法解决.然后我偶然发现了参数绑定[FromBody]属性,并使用它解决了404问题.
因此,后端API被重写为包括该属性,看起来像这样
[HttpPost]
[ResponseType(typeof(IHttpActionResult))]
public async Task<IHttpActionResult> DeleteStudySubset([FromBody] int id)
{
await _subsetRepo.DeleteStudySubset(id);
return Ok();
}
从我看来,我隐隐约约地理解[FromBody]告诉我的后端不要引用指向后端的url,而是搜索发送给它的正文?那正确吗?我认为我不能很好地解释我的朦胧理解.
标题中或多或少地概述了我的更多,最关键的问题,它是:是在我的后端上使用[FromBody]属性修复我的404良好实践,还是更多的黑客解决方案?
感觉像是解决方案太容易了,我担心总体上来说这是一个非优雅的解决方案,我只是在一个更严重的问题上打了个快速解决方案.例如未正确配置我的前端或后端API以使其彼此同步.
解决方法:
您的类型脚本正在编写帖子,然后在正文中发送id,这就是为什么您要输入404的原因,您应该更改打字稿以进行获取和保留后端,因为您不需要正文请求,因此get应该很好(在get调用的URL中发送ID).
或最佳实践是,Delete操作实际上是DELETE http请求,以便与REST更兼容,因此您需要使用HttpDelete标记后端方法,然后更改类型脚本以执行delete http请求.
我建议第二种选择.
原文地址:https://codeday.me/bug/20191026/1936019.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。