Web Api 2 CORS无法使用POST

时间:2015-08-24 16:16:30

标签: c# asp.net .net asp.net-web-api cors

根据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。

3 个答案:

答案 0 :(得分:2)

您需要将以下内容添加到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 配置节点内部。

答案 1 :(得分:2)

在WebApiConfig中的CORS设置实际工作之前,您需要将Microsoft.AspNet.WebApi.Cors NuGet包添加到项目中。

答案 2 :(得分:-1)

也许你应该在控制器中为帖子请求写一个动作

就像这样

public HttpResponseMessage Post()
{
    //Do something here
}