MVC5,Webapi和Angular Js

时间:2017-05-24 07:39:23

标签: angularjs asp.net-web-api asp.net-mvc-5

我正在使用两个项目测试一个简单的Visual Studio解决方案:

  • 项目A:具有相同角度代码的web项目,即用于验证用户的登录/功能(发布到项目B的帐户api)。帐户Api根据用户/名称给我令牌。

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

这两个项目都托管在同一台服务器上,但名称和端口不同: http://web.project.com:1100http://webapi.project.com:1101(common domain project.com)。

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

  

Access-Control-Allow-Origin missing

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

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

我安装此软件包:

Install-Package Microsoft.AspNet.WebApi.Cors 

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

config.enableCors();

我在api控制器中添加了这个属性:

[EnableCors(来源:" http://web.project.com:1100",标题:" ",方法:" " )]

第一个问题: Webproject使用angularjs http调用发送请求。从我的浏览器联系webproject到http://web.project.com:1100页面调用web api,但原点是http://web.project.com:1100或我的浏览器来源?我不明白网络服务器是否使用浏览器来源使用此来源或角度进行调用。我不了解角度代码是否由网络服务器或浏览器运行。

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

由于

2 个答案:

答案 0 :(得分:1)

您将在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'
    }
    });

答案 1 :(得分:0)

在您的后端项目(项目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", "*");
 }