Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net 4 Web API在参数中接收空数据_C#_Asp.net Web Api - Fatal编程技术网

C# .Net 4 Web API在参数中接收空数据

C# .Net 4 Web API在参数中接收空数据,c#,asp.net-web-api,C#,Asp.net Web Api,我是在.NET4中编写RESTfulWebAPI服务的WebAPI新手。我已经为我调用的类配置了控制器身份验证。我遇到的问题是,当我将JSON数据发布或放置到web api服务时,会调用控制器中的处理程序,但参数对象中包含空数据。我可以成功地获取数据,但是Post和Put会生成空的参数对象 我已经在客户端应用程序和Fiddler上进行了测试,得到了相同的结果。以下是我从Fiddler发来的信息: Action: PUT URI: http://127.0.0.1:81/Authenticatio

我是在.NET4中编写RESTfulWebAPI服务的WebAPI新手。我已经为我调用的类配置了控制器
身份验证
。我遇到的问题是,当我将JSON数据发布或放置到web api服务时,会调用控制器中的处理程序,但参数对象中包含空数据。我可以成功地获取数据,但是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"}
在身份验证控制器的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 }
        );
我的路线如下所示:

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 }
        );
请不要担心这是否是处理身份验证的好方法。这只是从端到端测试我的应用程序的第一步。我已经找到了其他人有这个问题的例子,但没有找到。

并将方法定义为

public void Put(Authentication value)
{

}

事实证明,模型绑定器只对属性有效,而不对字段有效。因此,我需要对
Authentication
类的各个成员进行属性转换。当我将身份验证类的定义更改为以下内容时,它可以正常工作:

public class Authentication
{
    public string hashvalue {get; set;}
    public string password { get; set; }
    public string username { get; set; }
}

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

我清理了发送{username}的路由,并将方法声明更改为:public void Put(字符串用户名,身份验证值)。现在,我正确地获得了用户名,但该值仍然是一个身份验证对象,成员的值都为null。Post处理程序是按照您发布的方式编码的(但称为Post),它还为身份验证对象的成员返回空值。此外,正如我在另一个可能导致相同问题的问题上遇到的一个症结所在。确保内容类型行是“content-type:application/json;charset=utf-8”。这很奇怪,我遇到了与问题中描述的问题类似的问题,删除Serializable属性很有帮助!谢谢