我想将用户发布到WebApi
我写了这个控制器:
public class AccountController : ApiController
{
public UserModel Get([FromUri]string username, [FromUri]string password)
{
var repository = new MongoRepository<User>();
User result = repository.Single(x => x.Username == username && x.Password == password);
UserModel user = result.ToUserModel();
if (result != null)
{
result.LastLogin = DateTime.Now;
user.LastLogin = DateTime.Now;
repository.Update(result);
}
return user;
}
public GenericResultModel Post(User user)
{
var repository = new MongoRepository<User>();
var existingUser = repository.Single(x => x.Username == user.Username || x.EmailAdress == user.EmailAdress);
if (existingUser == null)
{
if (repository.Add(user) != null)
{
return new GenericResultModel{Success = true, Errors = new List<string>()};
}
return new GenericResultModel(){Success = false, Errors = new List<string>(){"There was an Error adding the User !"}};
}
return new GenericResultModel(){Errors = new List<string>(){"The User already exists !"}, Success = false};
}
}
我的RouteConfig:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
我的AngularJS控制器
mod.controller('accountCtrl', function ($scope, $http, $window, $location) {
$scope.credentials = { username: '', password: '' };
$scope.Login = function () {
$http({
method: 'GET',
url: 'http://localhost:9239/Api/Account/Get?username=' + $scope.credentials.username + '&password=' + $scope.credentials.password,
/* data: JSON.stringify(credentials), */
headers: { 'Content-Type': 'application/json; charset=utf-8', 'dataType': 'json' }
}).
success(function (data, status, headers, config) {
$window.sessionStorage.setItem('loginToken', data.Id);
//$location.redirectTo('/Home');
}).
error(function (data, status) {
console.log("Request Failed");
});
};
$scope.registerModel = { username: '', password: '', passwordrepeat: '', email: '', emailrepeat: '' };
$scope.RegisterUser = function () {
$http.post('http://localhost:9239/Account/',$scope.registerModel);
};
});
当我登录时,每个标志都可以正常工作。 但是当我发布新用户时,我会收到404 Not Found错误。
我尝试了[FromBody]属性,但它没有用
当我调试我的代码时,不会被服务点击......
任何想法?
答案 0 :(得分:2)
假设你没有在你发布的api url中输入任何拼写错误,问题不在你的角度代码中。
404或Not Found错误消息是指示的HTTP标准响应代码 客户端能够与服务器通信, 但是服务器找不到请求的内容。
如果您曾尝试使用例如程序curl将用户发布到http://localhost:9239/Account
,那么您也可以获得此404代码。
如果您已打开浏览器并浏览http://localhost:9239/Account
,那么您也会获得此404代码。
基本上它意味着您尝试POST的网址不存在。我自己一直处于这种情况,因为我只是错误地写了网址。我能想到的唯一其他解释是服务器运行正常,但/Account
没有实现,例如不处理对该网址的调用。