【发布时间】:2016-10-15 11:47:57
【问题描述】:
我有一个奇怪的问题,我无法找到答案。
我在我的 Web API 应用程序中多次使用 CORS 来允许来自客户端应用程序的跨域请求,而没有发现这个问题。
在我的 WebApiConfig 类中,我有:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
}
}
我有三个带有属性路由的控制器方法:
[HttpPost]
[Route("pedigree")]
public IHttpActionResult GetPedigree([FromBody]Input input)
{
// some stuff
return Ok(result);
}
[HttpPost]
[Route("descendants")]
public IHttpActionResult GetDescendants([FromBody]Input input)
{
// some stuff
return Ok(result);
}
[HttpPost]
[Route("relatives")]
public IHttpActionResult GetRelatives([FromBody]Input input)
{
// some stuff
return Ok(person);
}
前两种方法工作正常并返回数据。第三个没有,它使 CORS 失败:
XMLHttpRequest 无法加载 http://localhost:21870/api/familysearch/relatives。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:8080' 不允许访问。响应的 HTTP 状态代码为 500。
我只是从 angular 为所有三种方法发出 ajax 请求:
$http.post('http://localhost:21870/api/familysearch/relatives', postData)
.then(function (response) {
// do something
}).catch(function (e) {
// do something
});
有人有什么想法吗?
【问题讨论】:
-
也许这有帮助:stackoverflow.com/questions/18619656/enable-cors-in-web-api-2。如果您已经解决了,请说明您是如何解决的。
标签: .net angularjs asp.net-web-api