Asp.net mvc 如何在fiddler中测试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([

我正在尝试调用以下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方法。