400 仅在启用 cors 时响应 asp.net web api POST 请求
Posted
技术标签:
【中文标题】400 仅在启用 cors 时响应 asp.net web api POST 请求【英文标题】:400 Response for asp.net web api POST request only when cors is enabled 【发布时间】:2018-07-20 13:47:35 【问题描述】:我已经被这个问题难住了好几天了。我是 CORS 的初学者,所以在导航过程中非常混乱。
出了什么问题: 我创建了一个 asp.net web api,它可以成功地将 POST 请求发送到我的 SQL 数据库。我已经使用 POSTMAN 成功发送数据。启用 CORS 后,我将无法再发送数据。我收到 400 错误请求。
我的代码的一些参考:
处理 POST 请求的我的控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using ClientsDataAccess;
namespace MS_Clients_Post.Controllers
public class ClientsController : ApiController
public HttpResponseMessage Post([FromBody] Client client)
try
using (NewlandiaEntities entities = new NewlandiaEntities())
entities.Clients.Add(client);
entities.SaveChanges();
var message = Request.CreateResponse(HttpStatusCode.Created, client);
message.Headers.Location = new Uri(Request.RequestUri +
client.Id.ToString());
return message;
catch (Exception ex)
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
我的 webAPIconfig.cs 文件(我在其中启用了 CORS):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Cors;
namespace MS_Clients_Post
public static class WebApiConfig
public static void Register(HttpConfiguration config)
// Web API configuration and services
//enabling cors. The "*","*","*" attributes allow all to access. This should be more limited acccess in the future.
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
//end of cors code.
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
我在 Fiddler 中看到的内容: OPTIONS Response 200 (Only returned with Angular APP, not POSTMAN
还有POST Response 400 BAD REQUEST (With POSTMAN or Angular APP
TLDR; 使用 ASP.net Web API 的 POST 请求在启用 CORS 之前有效。为什么之后就不行了?
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:我找到了解决问题的方法。这是未能确定实际出了什么问题。结合不同的事物:
当我的应用程序由 VSTS 部署到我的开发网络服务器时,它从 IIS 应用程序中删除了 SQL 服务器登录凭据。 (IIS 应用程序池的高级设置)。
其次,更重要的是,我的 Angular 应用程序的语法确实不正确。因此,Angular 应用程序的语法是错误的,但 POSTMAN 是正确的(在邮递员中,我将使用 GET 方法从服务器获取 JSON,然后复制粘贴 JSON 以执行 POST 请求)。
经验教训,如果显示 400 Bad Syntax,请仔细检查您发送的内容的语法!
【讨论】:
以上是关于400 仅在启用 cors 时响应 asp.net web api POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
无法在 ASP.Net Core Web api 中启用 CORS
尝试在 ASP.Net MVC 网站中启用 CORS 时出错
启用 Cors 的 ASP.NET Core API 不起作用
带有反应应用程序的 POST 上的 ASP.NET CORS 异常
仅在文件上传中出现 Asp.Net Core API CORS 策略错误
Access-Control-Allow-Origin header not found 错误,当在 ASP.NET Web api 身份中启用 cors 时