当前位置: 首页 > 知识库问答 >
问题:

不允许返回405方法的JQuery Ajax POST到Web API

萧英睿
2023-03-14
    function createLokiAccount(someurl) {
    var d = {"Jurisdiction":17}

        $.ajax({
                type: "POST",
                url:"http://myserver:111/Api/V1/Customers/CreateCustomer/",
                data: JSON.stringify(d),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data){alert(data);},
                failure: function(errMsg) {
                    alert(errMsg);
                }
            });
    }
    [HttpPost]
    public CreateCustomer.Response CreateCustomer(CreateCustomer.Request request)
    {
        HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
    ...
OPTIONS http://myserver:111/Api/V1/Customers/CreateCustomer/ 405 (Method Not Allowed) 
No 'Access-Control-Allow-Origin' header is present on the requested resource.      

当我从Fiddler执行POST请求时,它应该在响应头中包含“Access-Control-Allog-Origin:*”,这表明API配置正确,但(从Fiddler)jquery请求看起来如下:

选项http://myserver:111/api/v1/customers/createcustomer/http/1.1主机:myserver:111连接:keep-alive access-control-request-method:POST origin:http://localhost:6500 user-agent:mozilla/5.0(Windows NT 6.1;WOW64)applewebkit/537.36(KHTML,like Gecko)chrome/34.0.1847.116 safari/537.36 access-control-request-headers:accept,content-type,en-gb;q=0.6,it-it;q=0.4,it;q=0.2

那么为什么我的POST请求变成了选项请求呢?

共有1个答案

柴寂离
2023-03-14

首先,您只添加了一个标题,但至少需要三个标题:

"Access-Control-Allow-Origin", "*"

"Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"

"Access-Control-Allow-Headers", "Content-Type, Accept"

其次,如果您只为某个控制器中的一个方法需要CORS,那么添加头的方式是可以的。但总的来说,这是不对的。

ASP.NET5和Web API2提供了CORS库。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    }

}
 类似资料:
  • 我正在使用spring mvc设置一个rest api,并且大多数配置都是通过spring boot项目自动设置的。在前端,我使用angularjs及其$HTTP模块向服务器发出获取资源的ajax请求。资源URL在my controller类中定义,但仅匹配GET URL。我试过PUT和POST,但它们分别返回405方法不允许和403禁止. 我的控制器看起来像这样 而对与url不匹配的服务器的请求

  • 我有一个非常简单的Spring引导应用程序,它由以下代码保护: 这个想法是为了保护“admin”部分。它公开了一个RESTAPI。问题是所有的帖子都被退回了 405方法不允许 如果我从应用程序中删除安全启动器,它就会工作。这让我相信安全配置是问题所在。但我不知道怎么做。

  • 我有一个使用Jersey的非常简单的endpoint。我的URL是静态的,它不需要任何请求参数。看起来是这样的: 但是,每当我请求此URL时,我总是会收到一个HTTP状态代码405-方法不允许。 奇怪的是,如果我更改路径注释并定义一个路径变量,例如路径(“/图表/{blah}”),它就可以正常工作。 有人知道为什么我必须定义一个路径变量才能使其工作吗?我不需要路径变量,添加一个只是为了获得200响

  • 问题内容: 我正在开发flask注册表格,但收到错误消息: 码: registration.html: 当我访问时,我收到错误消息。我究竟做错了什么? 问题答案: 这是因为在定义路由时仅允许POST请求。 当你在浏览器中访问时,它将首先执行GET请求。只有提交表单后,浏览器才会执行POST。因此,对于像你这样的自我提交表单,你需要同时处理两者。 使用 应该管用。

  • 问题内容: 我打算使用Ajax将跨域请求发送到soap Web服务。Web服务的URL是:http://example1.asmx?op = GetVOD 我的代码: 在IIS 7服务器端,我已经将这些行添加到文件web.config中 当我在Chrome上运行客户端代码时,出现405错误: 有谁知道如何解决这个问题? 预先感谢 问题答案: 听起来像Web DAV正在阻碍。这是删除它的配置: ht

  • 我正在尝试使用Tomcat 7和Jersey 2构建一个简单的REST JSON api。所有的工作都做得很好。但投递/推杆返回了令人恐惧的405。 我知道这是一个很受欢迎的问题。但我已经研究了所有其他答案,它们对我的情况没有帮助。 我正在本地Linux工作站上运行它。我正在使用真正的Oracle JDK、Eclipse Mars、Tomcat 7和Maven来处理依赖关系。 作为同一个应用程序的