从AngularJS向Web Api发布数据

时间:2014-04-17 20:47:23

标签: angularjs asp.net-web-api

我想将用户发布到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]属性,但它没有用

当我调试我的代码时,不会被服务点击......

任何想法?

1 个答案:

答案 0 :(得分:2)

假设你没有在你发布的api url中输入任何拼写错误,问题不在你的角度代码中。


HTTP 404 Not Found

404或Not Found错误消息是指示的HTTP标准响应代码 客户端能够与服务器通信, 但是服务器找不到请求的内容。


如果您曾尝试使用例如程序curl将用户发布到http://localhost:9239/Account,那么您也可以获得此404代码。

如果您已打开浏览器并浏览http://localhost:9239/Account,那么您也会获得此404代码。

基本上它意味着您尝试POST的网址不存在。我自己一直处于这种情况,因为我只是错误地写了网址。我能想到的唯一其他解释是服务器运行正常,但/Account没有实现,例如不处理对该网址的调用。