C# 单元测试.NETWebAPI。设置查询字符串值

C# 单元测试.NETWebAPI。设置查询字符串值,c#,asp.net-mvc,rest,C#,Asp.net Mvc,Rest,我的ApiController HttpGet操作的第一行是 var returnOnlyDefault = (Request.GetQueryNameValuePairs() .Any(kv => ((kv.Key.ToLower() == "defaultview") && (kv.Value.ToLower() == "true")))); 这将查找“defaultview”的查询字符串值。代码“有效”,但我在单元测试中遇到了问题 在我的单元测试中,我将执行

我的ApiController HttpGet操作的第一行是

var returnOnlyDefault = (Request.GetQueryNameValuePairs()
    .Any(kv => ((kv.Key.ToLower() == "defaultview") && (kv.Value.ToLower() == "true"))));
这将查找“defaultview”的查询字符串值。代码“有效”,但我在单元测试中遇到了问题

在我的单元测试中,我将执行以下操作

var controller = new Controllers.ViewsController { Request = new HttpRequestMessage() };
controller.Request.Properties.Add(new KeyValuePair<string, object>("defaultview", "true"));
var controller=new Controllers.ViewsController{Request=new-HttpRequestMessage()};
controller.Request.Properties.Add(新的KeyValuePair(“defaultview”、“true”);

请求uri当然是空的。测试失败,因为它没有获取查询字符串值。

您应该设置请求Uri:

controller.Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:51083/?param1=someValue&param2=anotherValue");
现在,ApicController中的get querystring参数按预期工作:

var queryStringParams = Request.GetQueryNameValuePairs().ToList();
var param1 = queryStringParams.FirstOrDefault(kv => kv.Key.Equals("param1")).Value;
param1现在是“someValue”,单元测试运行