如何从 angularjs 向 web api 传递多种类型的参数?

How to pass multiple type of parameters in web api from angularjs?

我在将参数传递到我的网站时非常挣扎 api。

有两种情况我会一一列举。

  1. 我想像下面这样传递一个简单的字符串参数

        [HttpGet]
        public string VerifyName(string name)
        {
    
            return name + "hi";
        }
    

为此,我在我的 angularjs 控制器中创建了一个这样的 url。

var name = "hello";
            var msg = "";
            $http.get('/api/VisitorWeb/VerifyName', name).success(function (data) {
                 msg = data;
            }).error(function (data) {
                $scope.error = "An error has occured while adding! " + data;
            });

这一直返回 404。另外

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:43516/api/VisitorWeb/VerifyName'.","MessageDetail":"No action was found on the controller 'VisitorWeb' that matches the request."}
  1. 同样,当我试图传递一个对象时,它给出了相同的结果

我的angular函数

var loginModel = {
           UserName: $scope.UserName,
            PassWord: $scope.Password
        };

        var msg = "";
        $http.get('/api/VisitorWeb/VerifyLogin', loginModel).success(function (data) {
             msg = data;
        }).error(function (data) {
            $scope.error = "An error has occured while adding! " + data;
        }); 

网络Api方法

[HttpGet]
    public string VerifyLogin(UserLoginDomainModel loginModel)
    {
        //do some business logic
        return "abc ";
    }

响应是 404。

WebApi配置

public static void Register(HttpConfiguration config)
        {


config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new   MediaTypeHeaderValue("text/html"));

        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

我认为基本的路由存在一些问题,但有些无法弄清楚它是什么,请提出建议

试一试:

$http({ method: "GET", url: "/api/VisitorWeb/VerifyName", params: { name: name} }).success() 

此操作:

[HttpGet]
public string VerifyName(string name)
{
    return name + "hi";
}

定义无属性路由映射到标准约定路由成如下URL:

http://yourhost/apiVisitorWeb/VerifyName?name=myNameValue

因为您的路由模板 "api/{controller}/{action}/{id}" 需要一个名为 id(不是 name)的参数作为 URI 的一部分。

如果您想继续使用您的路由,请使用上面的 URI 或将您的参数名称更改为 id,因此您应该可以使用此地址:

http://yourhost/apiVisitorWeb/VerifyName/myNameValue

同样的事情也适用于您的复杂类型参数:在 GET 操作中,任何复杂参数都应该从 URI 绑定为查询字符串参数的集合。您的第二个操作将绑定到以下 URI:

http://yourhost/apiVisitorWeb/VerifyLogin?UserName=userNameValue&PassWord=myPassword

但出于多种原因(安全至上),这是一种不好的做法。我强烈建议您将这种操作变成 POST 操作,这样您就可以将您的模型作为请求的主体发送。