为什么我的ASP.NET Web API路由使用Postman但不使用Angular Post请求

时间:2018-04-05 13:22:54

标签: asp.net-mvc angular rest

我不知道这里发生了什么。我有一个使用ASP.NET Web API的POST路由,它应该更改我的SQL Server中的一些数据。当我使用Postman测试我的REST API时,它可以工作,数据在数据库中更改,响应也没问题。但是一旦我使用Angular5将json发布到同一个数据库,它就会响应错误405.这是我的代码......

首先,这是我的MVC应用程序的POST路由。

// POST api/<controller>
[Route("")]
[HttpPost]
public HttpResponseMessage Post([FromBody]BranchesInfo data)
{
    BranchesDB.updateBranchRow(data);
    var response = Request.CreateResponse<BranchesInfo>(HttpStatusCode.OK,data);
    return response;
}

Postman的回复在下一张图片中。数据在数据库中成功更改,尽管它与发送的信息无关,因为我在updateBranchRow()函数中调用的存储过程没有响应任何资源,所以我编写了资源以返回传递的相同数据英寸

您可以在此处看到请求已收到并在PostMan中成功运行

enter image description here

现在,这是我的Angular代码,它使用服务发布数据。

host: string = "http://localhost:57440/api/branches";

updateBranch(branchKey: Number, mainBranch: String, branchRegion: String, mainBranchFlag: Boolean) {
  var data = {
    BranchKey: branchKey,
    BranchName: mainBranch,
    BranchRegion: branchRegion,
    MainBranchFlag: mainBranchFlag
  }
  return this.http.post(this.host, data).map(res => res.json());
});

这是我尝试记录收到的回复后,我在浏览器控制台上收到的错误的图像。

浏览器控制台上的响应:

enter image description here

我真的不明白我做错了什么。基于REST的请求如何与Postman一起使用,但在使用Angular4时无法正常工作?

2 个答案:

答案 0 :(得分:5)

在Global.asax.cs文件中添加以下代码

protected void Application_BeginRequest()
    {
        if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
        {
            Response.Flush();
        }
    }

答案 1 :(得分:0)

Postman不发送XmlHttp请求。使用邮递员,您可以手动与网站进行交互,以便您拥有完全控制权。但是在您的Web应用程序中,您正在制作Cross Origin Request。您需要在Api中启用CORS。
您可以在Asp.Net Web API here中阅读有关CORS的更多信息。