Web Api 2 CORS 不适用于 POST
Posted
技术标签:
【中文标题】Web Api 2 CORS 不适用于 POST【英文标题】:Web Api 2 CORS not working with POST 【发布时间】:2015-11-18 03:42:18 【问题描述】:根据asp.net tutorial,我们只需要以下代码即可在Web Api
应用程序上启用cors:
var cors = new EnableCorsAttribute("*","*", "*");
config.EnableCors(cors);
以下是我的代码:
public static class WebApiConfig
public static void Register(HttpConfiguration config)
// Web API configuration and services
var cors = new EnableCorsAttribute("*","*", "*");
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
Get
工作正常,但Post
请求仍然出错
以下是错误,我正在发帖:
POST http://api.example.com/token 404(未找到) XMLHttpRequest 无法加载 http://api.example.com/token。没有“Access-Control-Allow-Origin”标头 存在于请求的资源上。原点'http://www.example.com' 因此不允许访问。响应包含 HTTP 状态代码 404.
【问题讨论】:
对同一资源的非CORS(同域)POST请求是否成功?我们可以看看你的控制器方法吗? 同一个域。 Web Api 只是主域 api.mydomain.com 的子域。 子域不是同一个域。 然后 var cors = new EnableCorsAttribute("","", "*"); config.EnableCors(cors);应该工作吗? 我什至不确定您的方向是否正确。 404错误?这条路线甚至存在吗? WebApi 路由区分大小写......你确定你不应该点击/Token
吗? 请向我们展示您的控制器代码/路由。
【参考方案1】:
您需要将以下内容添加到您的 Web.Config:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
System.webServer 配置节点内部。
【讨论】:
新错误:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。因此不允许访问 Origin 'example.com'。 尝试删除注册中的代码并运行它。如果不起作用,请参阅以下帖子***.com/questions/22343384/… 一旦添加了 NuGet 包并且 CORS 正常工作,这将由于发出重复的 Allow-Origin 标头而导致上述错误。【参考方案2】:您需要将 Microsoft.AspNet.WebApi.Cors NuGet 包添加到您的项目中,然后 WebApiConfig 中的 CORS 设置才能真正起作用。
【讨论】:
确保你在 web.config 中没有也许你应该在控制器中为发布请求编写一个动作
就这样
public HttpResponseMessage Post()
//Do something here
【讨论】:
以上是关于Web Api 2 CORS 不适用于 POST的主要内容,如果未能解决你的问题,请参考以下文章
启用 CORS 不适用于 Spotify Web API [重复]
CORS 不适用于从 Ajax 到 ASP.NET Core Web API 的调用
Java Spring REST API CORS 不适用于通过 jQuery 和 Chrome 的 DELETE 请求