微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从angular到web api发出http post请求时,405方法不允许错误

如何解决从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);
    })
  }

尝试发布到服务器时出现控制台错误

enter image description here

错误的原因可能是什么?

---编辑 - 找到解决方案---this answer

我用方法添加一个基本控制器

public HttpResponseMessage Options()
{
  return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}

现在它可以工作了。

解决方法

这意味着您正在调用的 URL 不支持 HTTP 动词 OPTIONS

即使您仅从代码中触发 POSTGET,此类请求也会自动触发。阅读https://stackoverflow.com/a/40497696/5389127

您必须在后端允许 OPTIONS 请求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?