POST请求抛出null异常

时间:2014-08-08 14:30:46

标签: c# linq post asp.net-web-api

我正在写信寻求帮助,关于从私有方法创建POST请求。我目前有两种方法GET和POST,它们从私有方法获取输入参数。当我使用Fiddler调用POST方法时:

Fiddler - 测试POST请求: 在提琴手的作曲家标签中,我复制了网址 - [http://localhost:45361/api/test]。在请求标头框中:

 User-Agent: Fiddler
 Content-Type: application/json;
 Host: localhost:45361
 Content-Length: 16
 Authorization: Basic ###########==

在“请求正文”框中:

 {"name":"prets"}

从以上输入中,我在以下代码行中得到 NullReferenceException

if (!string.IsNullOrEmpty(query.name))

但是,如果我使用相同的私有方法调用GET方法,我可以获得200,的响应,但不能用于POST请求

我尝试为查询对象添加验证,但POST请求仍然将输出显示为404错误,即"查询出现问题"。

     public  HttpContext Current { get; set; }

     [HttpGet]
     public HttpResponseMessage get([FromUri] Query query)
     {
         return method(Current, query);
     }
     [HttpPost]
     public HttpResponseMessage post([FromBody] Query query)
     {
         return method(Current, query);
     }

     private HttpResponseMessage method(HttpContext request, Query query)
     {
     if (User.IsInRole("admin"))
         {
             IQueryable<data> Data = null;

             //verifying the query
             if (query != null)
             {

             if (!string.IsNullOrEmpty(query.name))
             {
                 var ids = query.name.Split(',');

                 var dataMatchingTags = db.database_data.Where(c => ids.Any(id => c.Name.Contains(id)));

                 if (Data == null)
                     Data = dataMatchingTags;
                 else
                     Data = Data.Union(dataMatchingTags);
             }

                 if (Data == null)
                     Data = db.data;

                 if (query.endDate != null)
                 {
                     Data = Data.Where(c => c.UploadDate <= query.endDate);
                 }
                 Data = Data.OrderByDescending(c => c.UploadDate);
                 var data = Data.ToList();

                 if (!data.Any())
                 {
                     var message = string.Format("No data");
                     return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
                 }
                 return Request.CreateResponse(HttpStatusCode.OK, data);
             }

             return Request.CreateErrorResponse(HttpStatusCode.NotFound, "something wrong with query statement.");
         }
             return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Access Denied");
         }

这是我的对象模型类 - 查询:

 public class Query
  {
    public string name { get; set; }
    public Nullable<DateTime> startDate { get; set; }
    public Nullable<DateTime> endDate{ get; set; }
  }

我只是从我的控制器调用POST请求,因为我没有从客户端嵌入POST请求。我正在使用Fiddler来测试POST调用。

我有点挣扎,我可以采取其他方法,以解决这个问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

同意早期的评论者,nullpointer不能来自你说的那一行...... 一个等待发生的空指针是:

if (!string.IsNullOrEmpty(query.name))
{
    //do something
}
if (Data == null)
{
    Data = db.data; //this will always be null if the query object was null
}

这假设您在注释掉的块中创建/填充'db'对象。