我正在写信寻求帮助,关于从私有方法创建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调用。
我有点挣扎,我可以采取其他方法,以解决这个问题。
非常感谢任何帮助。
答案 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'对象。