2016-12-01 65 views
2

我遇到了CORS通過Servicestack C#API的問題。我有一個通過在Microsoft服務器上運行的nodejs後端服務的angularjs應用程序。 NodeJS提供的角度項目很好,節點本身沒有聯繫我運行在不同域但在同一臺服務器上的ServiceStack服務的問題。當我需要進行Microsft Active Directory調用以獲取當前活動用戶時,會出現問題。爲了正確地進行這個調用,我必須從我的angularjs項目中調用ServiceStack服務。當我撥打這個電話時,我收到No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://domain1:8080' is therefore not allowed access我有其他項目,我可以用同樣的電話撥打,但由於某種原因,我似乎無法完成此項工作。CORS問題與C#Servicestack和NodeJS

Angularjs調用(http://domain1:8080):

$http.get("http://domain2/dochelper/GetActiveAccount?format=json", { headers: { "siteprefix": prefix } }) 
     .then(function successCallback(resp) { 
      console.log(resp.data); 
     }, function errorCallback(resp) { 

     }); 

Servicestack要求:

[Route("/GetActiveAccount")] 
public class GetActiveAccount 
{ 
    public string Id { get; set; } 
} 

[Authenticate] 
public AccountDTO Get(GetActiveAccount request) 
{ 
    AccountDTO obj = new AccountDTO(); 

    var ses = this.GetSession() as AuthUserSession; 

    return obj; 
} 

Servicestack CORS配置:

  Plugins.Add(new CorsFeature(allowOriginWhitelist: new[] { "http://winexpresstest:8080" }, 
       allowedMethods: "GET, POST, PUT, DELETE, OPTIONS", 
       allowedHeaders: "Content-Type, Authorization, Session-Id, ViewPort-Width, ViewPort-PixelRatio, Accept-Ranges, Pragma, Cache-Control, If-Modified-Since, Access-Control-Allow-Origin, siteprefix", 
       allowCredentials: true)); 

      Plugins.Add(new AuthFeature(() => new AuthUserSession(), new ServiceStack.Auth.IAuthProvider[] { 
       new AspNetWindowsAuthProvider(this) { 
        LoadUserAuthFilter = LoadUserAuthInfo, 
        AllowAllWindowsAuthUsers = true 
       }, 
      })); 

     } 

回答

3

你要指定白名單的起源讓域名在Access-Control-Allow-Origin HTTP響應hea中明確列出例如:

Plugins.Add(new CorsFeature(allowOriginWhitelist: new [] { "http://domain1:8080" }, 
    allowedMethods: "GET, POST, PUT, DELETE, OPTIONS", 
    allowCredentials: false)); 
+0

'allowedOrigins:「http:/ domain1:8080」'將此添加到CorsFeature中似乎沒有任何改變。 – Ohjay44

+0

@ Ohjay44您需要使用接受'allowOriginWhitelist'的構造函數,並在我的示例中看到一組域。 – mythz

+0

那是哪個構造函數?我目前使用ServiceStack構造函數。 – Ohjay44