5

我是一个 Web API 新手,在 .Net 4 中编写一个 RESTFul Web Api 服务。我已经为我正在调用的类配置了一个控制器Authentication。我遇到的问题是,当我将 JSON 数据发布或放入 web api 服务时,我在控制器中的处理程序被调用,但参数对象中有 NULL 数据。我可以成功获取数据,但是 Post 和 Put 提供了空参数对象。

我已经从客户端应用程序和 Fiddler 进行了测试,得到了相同的结果。这是我从 Fiddler 发送的内容:

Action: PUT
URI: http://127.0.0.1:81/Authentication/xyz/
HTTP Version: HTTP/1.1
Request Headers:
User-Agent: Fiddler
Host: 127.0.0.1:81
Content-Type: application/json; charset=utf-8
Content-Length: 75
Request Body:
{"hashvalue":"kbVFNeBbNHmYQXXlS6d7Ag==","password":"test","username":"dan"}

当我在 Authentication 控制器的 Put 处理程序中设置断点时:

    public void Put(string IDstring, Authentication value)
    {

    }

我在监视窗口中得到以下信息:

IDstring                    null    string
value   {bbsRESTResources.Authentication}   bbsRESTResources.Authentication
    hashvalue   null    string
    password    null    string
    username    null    string

我的身份验证类如下所示:

namespace bbsRESTResources
{
    public class Authentication
    {
        public string username;
        public string password;
        public string hashvalue;
    }
}

我的路线如下所示:

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

请不要担心这是否是处理身份验证的好方法。这只是端到端测试我的应用程序的第一步。我已经寻找其他人遇到此问题的示例,但没有找到。

4

3 回答 3

6

事实证明,模型绑定器仅适用于属性,而不适用于字段。因此,我需要从Authentication类的各个成员中创建属性。当我将 Authentication 类的定义更改为以下内容时,它可以工作:

public class Authentication
{
    public string hashvalue {get; set;}
    public string password { get; set; }
    public string username { get; set; }
}
于 2012-05-08T16:19:32.277 回答
2

我有一个类似的问题(参数对象为空),不同的原因。我已将我的模型标记为可序列化,并且由于某种原因,当我这样做时模型绑定不起作用。删除该属性后,绑定再次起作用。

于 2012-10-03T04:49:03.323 回答
0

并将方法定义为

public void Put(Authentication value)
{

}
于 2012-05-08T09:01:56.100 回答