Cors with MVC5, Webapi and Angular Js



我正在测试一个简单的Visual studio解决方案,其中包含两个项目:

项目
  • A:具有相同角度代码的 Web 项目,即登录/功能以自动用户(发布到帐户 API 到项目 B)。帐户 API 根据用户名/名称给我令牌。

  • 项目 B:Web api,我可以在其中获取相同的简单数据 (http GET),并且有相同的帐户 api(即基于凭据为我提供身份验证令牌的集成 api/令牌)。

任一项目都托管在同一台服务器上,但名称和端口不同: http://web.project.com:1100 和 http://webapi.project.com:1101(公共域 project.com)。

我的问题是关于 CORS:当尝试使用项目 B 从项目 A 登录用户时,我收到

缺少访问控制-允许源

(在浏览器控制台中)从 wepabpi.project.com:1101。

这是因为域托管在不同的域中。

我安装这个软件包:

Install-Package Microsoft.AspNet.WebApi.Cors 

我在webapiconfig中添加了这一行.cs(注册方法)

config.enableCors();

我在我的 api 控制器中添加此属性:

[EnableCors(origins: "http://web.project.com:1100", headers: ">", methods: ">")]

第一个问题:Webproject通过使用angularjs http调用发送请求。何时从我的浏览器联系 Web 项目以 http://web.project.com:1100 页面调用 Web api,但来源是 http://web.project.com:1100 还是我的浏览器来源?我不明白网络服务器是使用此来源进行调用还是使用浏览器来源进行角度调用。我不明白角度代码是否由网络服务器或浏览器运行。

第二个问题:还将此行添加到控制器并启用 cors,我收到相同的错误。我想令牌生成需要相同的额外配置,但是在哪里?这是因为标准令牌生成不是特定的控制器。

谢谢

您将在 AngularJS 服务或工厂中添加标头 因为两者都是两个不同的项目。第一个项目代码仅包含本地服务器。第二个项目代码包含远程位置,因此您将添加远程位置 IP 地址和头文件

this.getloggedInUserData = function() {
var defer = $q.defer();
var loggedInUserPromise =http({
url: "http://192.168.1.8:8080/ABCD1.5/getloggedFarmerData",
method: "GET",
headers: {
'Accept': 'application/json',   'Content-Type': 'application/json'
}
});

在后端项目(项目 B)中,您只需要在全局级别将Access-Control-Allow-Origin设置为*, 所以基本上允许所有其他JS访问你的REST api。

在文件Global.asax.cs导入using System.Web;并添加以下代码:

protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
} 

最新更新