【问题标题】:Web Api 2 CORS not working with POSTWeb Api 2 CORS 不适用于 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 吗? 向我们展示您的控制器代码/路由。

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


【解决方案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'。
  • 尝试删除注册中的代码并运行它。如果不起作用,请参阅以下帖子stackoverflow.com/questions/22343384/…
  • 一旦添加了 NuGet 包并且 CORS 正常工作,这将由于发出重复的 Allow-Origin 标头而导致上述错误。
【解决方案2】:

您需要将 Microsoft.AspNet.WebApi.Cors NuGet 包添加到您的项目中,然后 WebApiConfig 中的 CORS 设置才能真正起作用。

【讨论】:

  • 确保你在 web.config 中没有 的东西。您需要 NuGet 包和 WebApiConfig 中的内容,但不需要任何告诉 IIS 执行自定义标头的内容。
【解决方案3】:

也许你应该在控制器中为发布请求编写一个动作

就这样

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

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 2018-03-24
    • 2015-02-21
    • 2015-09-08
    • 2019-10-05
    • 2016-06-04
    • 2015-07-16
    • 2016-06-27
    • 2013-12-05
    相关资源
    最近更新 更多