Asp.net mvc 如何在fiddler中测试post方法?
我正在尝试调用以下POST方法Asp.net mvc 如何在fiddler中测试post方法?,asp.net-mvc,linq,asp.net-web-api,fiddler,Asp.net Mvc,Linq,Asp.net Web Api,Fiddler,我正在尝试调用以下POST方法[http://localhost:45361/api/test],在Fiddler中,带有[Request Header]选项卡,具有[用户代理:Fiddler,内容类型:application/json;charset=utf-8],在[Request Body]中,我传递以下请求{“tag”:“5667”}。但是,其输出错误-->对象引用未设置为对象的实例 [HttpPost] public HttpResponseMessage post([
[http://localhost:45361/api/test]
,在Fiddler中,带有[Request Header]选项卡,具有[用户代理:Fiddler,内容类型:application/json;charset=utf-8]
,在[Request Body]中,我传递以下请求{“tag”:“5667”}
。但是,其输出错误-->对象引用未设置为对象的实例
[HttpPost]
public HttpResponseMessage post([FromBody] Query query)
{
IQueryable<data_qy> Data = null;
if (!string.IsNullOrEmpty(query.tag)) //--> line causing the ERROR
{
var ids = query.tag.Split(',');
var dataMatchingTags = db.data_qy.Where(c => ids.Contains(c.TAG));
if (Data == null)
Data = dataMatchingTags;
else
Data = Data.Union(dataMatchingTags);
}
if (!string.IsNullOrEmpty(query.name))
{
var ids = query.name.Split(',');
var dataMatchingTags = db.data_qy.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_qy;
if (query.endDate != null)
{
Data = Data.Where(c => c.UploadDate <= query.endDate);
}
if (query.startDate != null)
{
Data = Data.Where(c => c.UploadDate >= query.startDate);
}
var data = Data.ToList();
if (!data.Any())
{
var message = string.Format("No data found");
return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
}
return Request.CreateResponse(HttpStatusCode.OK, data);
}
[HttpPost]
公共HttpResponseMessage帖子([FromBody]查询)
{
IQueryable数据=null;
如果(!string.IsNullOrEmpty(query.tag))/>导致错误的行
{
var id=query.tag.Split(',');
var dataMatchingTags=db.data_qy.Where(c=>ids.Contains(c.TAG));
如果(数据==null)
数据=数据匹配标签;
其他的
Data=Data.Union(dataMatchingTags);
}
如果(!string.IsNullOrEmpty(query.name))
{
var id=query.name.Split(',');
var dataMatchingTags=db.data_qy.Where(c=>ids.Any(id=>c.Name.Contains(id));
如果(数据==null)
数据=数据匹配标签;
其他的
Data=Data.Union(dataMatchingTags);
}
如果(数据==null)
Data=db.Data_qy;
if(query.endDate!=null)
{
Data=Data.Where(c=>c.UploadDate c.UploadDate>=query.startDate);
}
var data=data.ToList();
如果(!data.Any())
{
var message=string.Format(“未找到数据”);
返回请求.CreateErrorResponse(HttpStatusCode.NotFound,消息);
}
返回请求.CreateResponse(HttpStatusCode.OK,数据);
}
编辑:
查询类:
public class Query
{
public string name { get; set; }
public string tag{ get; set; }
public Nullable<DateTime> startDate { get; set; }
public Nullable<DateTime> endDate{ get; set; }
}
公共类查询
{
公共字符串名称{get;set;}
公共字符串标记{get;set;}
公共可为空的起始日期{get;set;}
公共可为空的结束日期{get;set;}
}
我不太清楚,这是否是测试post方法的正确方法,或者我是否需要在上面的控制器中添加更多代码。请给我一些建议。非常感谢 在fiddler中需要的最重要的东西之一是post请求中的内容类型头规范。WebAPI具有基于请求头和管道中内容协商者注册的内容协商概念。请参阅以了解更多详细信息 就你而言: 内容类型:application/json;字符集=utf-8 以下是小提琴手作曲家的全部请求:
User-Agent: Fiddler
Host: localhost:26572
Content-Length: 16
Content-Type: application/json; charset=utf-8
以下是请求主体:
{"name":"hello"}
通过此post请求,您应该能够继续。模型绑定器无法将标记值绑定到查询类上的属性。因为它不能这样做,所以它不会创建查询类的实例,并且它将保持空。由于它为空,您可以检查它的属性。我已经检查了你的请求,甚至根据你的代码做了一个模拟,它对我有效。粘贴查询类的代码您无法检查其属性*谢谢您的回复。我已经用我的查询对象类更新了上面的原始帖子。如果可能的话,请提出建议。谢谢,我觉得很好。你能给我你的原始请求数据吗。在fiddle中,转到Inspector>rawPOST HTTP/1.1用户代理:Fiddler内容类型:application/json;charset=utf-8 Host:localhost:45361 Content Length:15{“name”:“bacm”}谢谢,但就内容类型而言,我目前正在使用相同的方法来测试我的post方法。