我是WebAPI,AngularJS和.NET身份验证的新手,我正在使用本教程 HERE (〜不到10分钟),我收到的错误是Failed to load resource: net::ERR_CONNECTION_REFUSED
,通常情况下我只能谷歌,但我真的迷失了,因为这些都是我的新技术。
在我尝试注册"在教程结尾附近,这是出现错误的地方。有人可以仔细检查该教程,看看他们是否可以注册工作,或快速判断他们使用的东西是否已过期或损坏?如上所述,它需要花费不到10分钟的时间。
这是我的代码,无论
AngularJSClient解决方案
app.js
(function () {
'use strict';
// Module name is handy for logging
var id = 'app';
// Create the module and define its dependencies.
var app = angular.module('app', [
]);
app.config(['$httpProvider', function ($httpProvider) {
// Use x-www-form-urlencoded Content-Type
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
// Override $http service's default transformRequest
$httpProvider.defaults.transformRequest = [function (data) {
/**
* The workhorse; converts an object to x-www-form-urlencoded serialization.
* @param {Object} obj
* @return {String}
*/
var param = function (obj) {
var query = '';
var name, value, fullSubName, subName, subValue, innerObj, i;
for (name in obj) {
value = obj[name];
if (value instanceof Array) {
for (i = 0; i < value.length; ++i) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if (value instanceof Object) {
for (subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if (value !== undefined && value !== null) {
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
}
return query.length ? query.substr(0, query.length - 1) : query;
};
return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
}];
}]);
// Execute bootstrapping code and any dependencies.
app.run(['$q', '$rootScope',
function ($q, $rootScope) {
}]);
})();
mainCtrl.js
(function () {
'use strict';
var controllerId = 'mainCtrl';
angular.module('app').controller(controllerId,
['userAccountService', mainCtrl]);
function mainCtrl(userAccountService) {
// Using 'Controller As' syntax, so we assign this to the vm variable (for viewmodel).
var vm = this;
// Bindable properties and functions are placed on vm.
vm.title = 'mainCtrl';
vm.isRegistered = false;
vm.isLoggedIn = false;
vm.userData = {
userName: "",
password: "",
confirmPassword: "",
};
vm.registerUser = registerUser;
vm.loginUser = loginUser;
vm.getValues = getValues;
function registerUser() {
userAccountService.registerUser(vm.userData).then(function (data) {
vm.isRegistered = true;
}, function (error, status) {
vm.isRegistered = false;
console.log(status);
});
}
function loginUser() {
userAccountService.loginUser(vm.userData).then(function (data) {
vm.isLoggedIn = true;
vm.userName = data.userName;
vm.bearerToken = data.access_token;
}, function (error, status) {
vm.isLoggedIn = false;
console.log(status);
});
}
function getValues() {
userAccountService.getValues().then(function (data) {
vm.values = data;
console.log('back... with success');
});
}
}
})();
userAccountService.js
(function () {
'use strict';
var serviceId = 'userAccountService';
angular.module('app').factory(serviceId, ['$http', '$q', userAccountService]);
function userAccountService($http, $q) {
// Define the functions and properties to reveal.
var service = {
registerUser: registerUser,
loginUser: loginUser,
getValues: getValues,
};
var serverBaseUrl = "http://localhost:60737";
return service;
var accessToken = "";
function registerUser(userData) {
var accountUrl = serverBaseUrl + "/api/Account/Register";
var deferred = $q.defer();
$http({
method: 'POST',
url: accountUrl,
data: userData,
}).success(function (data, status, headers, cfg) {
console.log(data);
deferred.resolve(data);
}).error(function (err, status) {
console.log(err);
deferred.reject(status);
});
return deferred.promise;
}
function loginUser(userData) {
var tokenUrl = serverBaseUrl + "/Token";
if (!userData.grant_type) {
userData.grant_type = "password";
}
var deferred = $q.defer();
$http({
method: 'POST',
url: tokenUrl,
data: userData,
}).success(function (data, status, headers, cfg) {
// save the access_token as this is required for each API call.
accessToken = data.access_token;
// check the log screen to know currently back from the server when a user log in successfully.
console.log(data);
deferred.resolve(data);
}).error(function (err, status) {
console.log(err);
deferred.reject(status);
});
return deferred.promise;
}
function getValues() {
var url = serverBaseUrl + "/api/values/";
var deferred = $q.defer();
$http({
method: 'GET',
url: url,
headers: getHeaders(),
}).success(function (data, status, headers, cfg) {
console.log(data);
deferred.resolve(data);
}).error(function (err, status) {
console.log(err);
deferred.reject(status);
});
return deferred.promise;
}
// we have to include the Bearer token with each call to the Web API controllers.
function getHeaders() {
if (accessToken) {
return { "Authorization": "Bearer " + accessToken };
}
}
}
})();
WebAPI2解决方案
WebApiConfig.cs *
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API配置和服务 //将Web API配置为仅使用承载令牌身份验证。 config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
//Enable CORS for all origins, all headers, and all methods,
// You can customize this to match your requirements
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我得到的错误再次是在本教程中第一次测试Register函数时。我得到Failed to load resource: net::ERR_CONNECTION_REFUSED
答案 0 :(得分:3)
将 config.EnableCors()添加到 WebApiConfig ,如
public static void Register(HttpConfiguration config)
{
//Cors code
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
在 ConfigureAuth OAuthAuthorizationServerOptions 中最后添加它 AllowInsecureHttp = true
答案 1 :(得分:0)
我有类似的问题。这完全是关于CORS的。我有一个&#34;无法加载资源&#34;现在错误,但我的原因不同,因为我的cors代码已经工作了几个月。
我希望这会有所帮助......
https://github.com/MashupJS/MashupJS/blob/master/docs/mashupApi/WebApi-Cors-Chrome.md
以下是如何创建从头开始支持CORS的WebApi。微软的文件并没有让我到那里,所以一旦我弄明白,我就自己写了。
祝你好运!