跨域问题(CORS, Cross-Origin Resource Sharing)是由于浏览器的同源策略(Same-Origin Policy)导致的,当Web应用尝试从一个与自身不同源(协议、域名或端口不同)的服务器请求资源时,浏览器会阻止这种请求。
在AngularJS(前端)与ASP.NET Web API(后端)分离部署时,如果它们不在同一个域名下,浏览器会阻止前端对后端的AJAX请求,导致跨域错误。
// 在WebApiConfig.cs中
public static void Register(HttpConfiguration config)
{
// 启用CORS
var cors = new EnableCorsAttribute("*", "*", "*"); // 允许所有来源、所有头、所有方法
config.EnableCors(cors);
// 其他配置...
}
[EnableCors(origins: "http://example.com", headers: "*", methods: "*")]
public class YourController : ApiController
{
// 控制器方法...
}
var app = angular.module('myApp', []);
app.config(['$httpProvider', function($httpProvider) {
// 启用跨域请求
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
// 使用示例
app.controller('MyController', ['$http', function($http) {
$http({
method: 'GET',
url: 'http://your-api-domain.com/api/values',
headers: {
'Content-Type': 'application/json'
}
}).then(function(response) {
console.log(response.data);
}, function(error) {
console.error(error);
});
}]);
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
withCredentials: true
(AngularJS端)和SupportsCredentials = true
(服务器端)Access-Control-Allow-Headers
中明确列出这些头*
作为允许的来源,应明确指定允许的域名如果CORS配置复杂,可以考虑:
通过以上配置,AngularJS前端应该能够成功调用ASP.NET Web API后端服务而不会遇到跨域问题。
没有搜到相关的文章