2016-06-14 65 views
0

我有一個奇怪的問題,我一直無法找到答案。.NET Web API CORS不適用於所有路由

我在我的Web API應用程序中多次使用CORS,以允許來自客戶端應用程序的跨源請求而不會看到此問題。

在我WebApiConfig I類有:

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」標題。因此不允許訪問原產地'http://localhost:8080'。響應有HTTP狀態代碼500。

我只是從角度做出一個Ajax請求的三種方法:

$http.post('http://localhost:21870/api/familysearch/relatives', postData) 
    .then(function (response) { 
     // do something 
    }).catch(function (e) { 
     // do something 
    }); 

人有什麼想法?

回答

0

您需要在您的控制器類中添加EnableCors屬性,以便在該特定的WebAPI Controller上啓用CORS。

[EnableCors("*", "*", "*")] 
+0

感謝您的意見,我確實嘗試過,但沒有區別。無論如何,我的webapiconfig中的enablecors在所有控制器和方法中都應該是全局的。 – Starscream1984