我有一个WebApi2 OWIN SelfHost应用程序和一个REST方法。我对该服务进行了JQuery ajax调用,但是我收到了错误" No' Access-Control-Allow-Origin'",如下所示:
我添加了Nuget包" Microsoft.Owin.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);
}
});
错误讯息: &#34;无法加载资源:服务器响应状态为405(方法不允许)url ... / api / car / get / 6975908 XMLHttpRequest无法加载url ... / api / car / get / 6975908。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; url ...:62456&#39;因此不允许访问。&#34;
此时我只需启用CORS,不需要授权,我在控制器上设置了[AllowAnonymous]属性。可能是什么问题?
答案 0 :(得分:3)
我发现了问题。 &#34; UseCors&#34;方法应该在启动类的应用程序级别,而不是映射的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);
});
}
}