Owin Self Host WebApi2 上的 CORS 错误
Posted
技术标签:
【中文标题】Owin Self Host WebApi2 上的 CORS 错误【英文标题】:CORS error on Owin Self Host WebApi2 【发布时间】: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]属性。可能是什么问题?
【问题讨论】:
【参考方案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);
);
【讨论】:
以上是关于Owin Self Host WebApi2 上的 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
Use OWIN to Self-Host ASP.NET Web API 2
使用 OData 响应 Owin Self-Host 忽略 Web Api 中的 Null 属性/值
用Web api /Nancy 通过Owin Self Host简易实现一个 Http 服务器
带有 OWIN 的 WebApi 2 - 授权挑战不会重定向到登录
Autofac 错误:无法加载文件或程序集 'System.Web.Http, Version=5.2.0.0,...' 我的项目是 Owin WebApi2 SelfHost