如何解决从angular到web api发出http post请求时,405方法不允许错误
我有一个 .net 核心 web-api 作为后端的 angular 应用程序。 来自客户端的 get 请求按预期工作,并从服务器获取数据。
但是当我尝试从客户端向服务器发送消息时,我收到 405 方法不允许错误。
我已经实现了位于 this answer 的 CORS 中间件:
httpContext.Response.Headers.Add("Access-Control-Allow-Origin","http://localhost:4200");
httpContext.Response.Headers.Add("Access-Control-Allow-Credentials","true");
httpContext.Response.Headers.Add("Access-Control-Allow-Headers","Content-Type,X-CSRF-Token,X-Requested-With,Accept,Accept-Version,Content-Length,Content-MD5,Date,X-Api-Version,X-File-Name");
httpContext.Response.Headers.Add("Access-Control-Allow-Methods","POST,GET,PUT,PATCH,DELETE,OPTIONS");
web-api 控制器
[Route("api/[controller]")]
[ApiController]
public class PostsController : ControllerBase
{
[HttpGet]
public ActionResult<List<Post>> Get()
{
return _repository.Get().ToList();
}
[HttpPost]
public IActionResult Post([FromBody] Post post)
{
if (post == null)
{
return BadRequest();
}
_repository.Add(post);
_repository.Save();
return CreatedAtRoute("GetPostById",new { ID = post.Id },post);
}
}
在服务器上发布模型
public class Post
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
app.component.ts
apiUrl = 'http://localhost:33633/api/posts';
constructor(private http: HttpClient) {}
onCreatePost(postData: { title: string; content: string }) {
this.http.post(this.apiUrl,postData).subscribe(responseData =>
{
console.log(responseData);
})
}
onFetchPosts() {
this.http.get(this.apiUrl).subscribe(responseData =>
{
console.log(responseData);
})
}
尝试发布到服务器时出现控制台错误:
此错误的原因可能是什么?
---编辑 - 找到解决方案--- 在this answer
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
现在它可以工作了。
解决方法
这意味着您正在调用的 URL 不支持 HTTP 动词 OPTIONS
。
即使您仅从代码中触发 POST
或 GET
,此类请求也会自动触发。阅读https://stackoverflow.com/a/40497696/5389127。
您必须在后端允许 OPTIONS
请求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。