【问题标题】:Set ASP.NET WEB API 2 custom route设置 ASP.NET WEB API 2 自定义路由
【发布时间】:2015-11-10 23:45:26
【问题描述】:

我已经创建了登录表单,并想在服务器端检查输入用户名的用户是否存在或用户名和密码匹配。 我创建了角度服务:

(function (app) {
    'use strict';

var baseApiPath = "http://localhost:55581/api/";

app.factory('loginService', ['$q', '$timeout', '$http',
    function ($q, $timeout, $http) {

        function getUser(username, password) {
            var deferred = $q.defer();
            $timeout(function () {
                $http({
                    method: 'GET',
                    url: baseApiPath + 'login/' + username + password,
                    data: JSON.stringify(username, password),
                    headers: { 'Content-Type': 'application/JSON' }
                }).success(function (data) {
                    deferred.resolve(data);
                }).error(function (error) {
                    console.log('data Error:', error);
                });
            }, 30);

            return deferred.promise;
        };

        return {
            getUser: getUser
        };
    }]);
})(angular.module('myApp'));

自定义 Web Api 控制器是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using FoodOrdering.API.Models;

namespace FoodOrdering.API.Controllers
{
    public class LoginController : ApiController
    {
        private FoodOrderingContext db = new FoodOrderingContext();

        [Route("login/{username}/{password}")]
        public async Task<IHttpActionResult> GetUser(string username,string password)
        {
            User user = await db.Users.FindAsync(username, password);
            if (user == null)
            {
                return NotFound();
            }

            return Ok(user);
        }
    }
}

请注意,我已经定义了自定义路线。我的问题是:如果服务器存在并与其密码匹配,我如何从服务器获取用户。谢谢!

【问题讨论】:

  • 您从哪里调用您的loginService ?你返回承诺,所以你在then函数中获得用户。
  • 我已经在 loginController 中实现了:$scope.login = function (user) { loginService.getUser(user.username,user.password).then(function (data) { $scope.logedUser = data; }); };
  • 但是,问题是,当我点击这个 API 时,它并没有进入 web api 函数

标签: asp.net angularjs web-services rest web


【解决方案1】:

当您在路由中使用 login/{params} 时,它会生成 url login/params?params=1

在你的情况下

工厂:

$timeout(function () {
            $http({
                method: 'GET',
                url: baseApiPath + 'login/username/password?username='+username+'&password='+ password,
                headers: { 'Content-Type': 'application/JSON' }
            }).success(function (data) {
                deferred.resolve(data);
            }).error(function (error) {
                console.log('data Error:', error);
            });
        }, 30);

在你的控制器中使用[FromUrl] 所以get方法应该是:

[Route("login/{username}/{password}")]
    public async Task<IHttpActionResult> GetUser([FromUri]string username,[FromUri]string password)
    {
        User user = await db.Users.FindAsync(username, password);
        if (user == null)
        {
            return NotFound();
        }

        return Ok(user);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多