【问题标题】:CORS error on Owin Self Host WebApi2Owin Self Host WebApi2 上的 CORS 错误
【发布时间】:2014-08-14 07:37:06
【问题描述】:

我有一个 WebApi2 OWIN SelfHost 应用程序和一个 REST 方法。我对服务进行了 JQuery ajax 调用,但出现错误“No 'Access-Control-Allow-Origin'”,如下所示:

我已添加 Nuget 包“Microsoft.Owin.Cors”以启用 cors。

这是我的启动 API 代码:

app.Map("/api", apiApp =>
{
    var config = new HttpConfiguration();
    config.MapHttpAttributeRoutes();
    apiApp.UseWebApi(config);
    apiApp.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
});

我的 API 控制器类:

[RoutePrefix("car")]
[AllowAnonymous]
public class CarController : ApiController

我的 API 控制器方法:

[HttpGet]
[Route("get/{id}")]
public HttpResponseMessage Get(string id)
{
    var car = GetCars().Where(c => c.Id.Equals(id)).FirstOrDefault();
    return new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new ObjectContent<object>(new
        {
            car
        }, Configuration.Formatters.JsonFormatter)
    };
}

这是我的 ajax 代码:

$.ajax({
    type: "GET",
    url: 'url.../api/car/get/6975908',
    headers: {
        'Access-Control-Allow-Origin': '*',         
        "X-Requested-With": "XMLHttpRequest"
    },
    crossDomain: true,
    dataType: 'json',
    success: function (data) {
        if (data.Success) {
            alert(data.Content); //display success 
        }
        else {
            alert(data.Message) //display exception
        }

    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus);
    }
});

错误信息: “加载资源失败:服务器响应状态为 405(不允许方法) url.../api/car/get/6975908 XMLHttpRequest 无法加载 url.../api/car/get/6975908。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'url...:62456'。"

此时我只需要开启CORS,不需要授权,我已经在控制器上设置了[AllowAnonymous]属性。可能是什么问题?

【问题讨论】:

    标签: ajax cors asp.net-web-api owin


    【解决方案1】:

    我发现了问题。 “UseCors”方法应该在启动类中的应用程序级别,而不是映射的 apiApp。请参阅下面的完整状态。

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            //use cors on server level
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    
            app.Map("/api", apiApp =>
            {
                var config = new HttpConfiguration();
                config.MapHttpAttributeRoutes();
                apiApp.UseWebApi(config);
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 2021-09-30
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多