gpt4 book ai didi

c# - 为什么没有查询参数传递到我的 NancyFX 模块?

转载 作者:可可西里 更新时间:2023-11-01 08:18:47 25 4
gpt4 key购买 nike

我在我的应用程序中运行一个自托管的 NancyFX 网络服务器。现在我托管了一个模块:

public class MetricsModule : NancyModule
{
private IStorageEngine _storageEngine;

public MetricsModule(IStorageEngine storageEngine) : base("/metrics")
{
_storageEngine = storageEngine;

Get["/list"] = parameters =>
{
var metrics = _storageEngine.GetKnownMetrics();
return Response.AsJson(metrics.ToArray());
};

Get["/query"] = parameters =>
{
var rawStart = parameters.start;
var rawEnd = parameters.end;
var metrics = parameters.metrics;

return Response.AsJson(0);
};
}
}

我的 Bootstrapper 类是:

public class OverlookBootStrapper : DefaultNancyBootstrapper
{
private readonly IStorageEngine _storageEngine;

public OverlookBootStrapper(IStorageEngine storageEngine)
{
_storageEngine = storageEngine;
}

protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
container.Register(_storageEngine);
}
}

我正在尝试通过以下测试对其进行测试:

    [TestInitialize]
public void Init()
{
_storageEngine = new Mock<IStorageEngine>();

var bootstrapper = new OverlookBootStrapper(_storageEngine.Object);
_browser = new Browser(bootstrapper);
}

[TestMethod]
public void Query_Builds_Correct_Query_From_Parameters()
{
var metric = new Metric("device", "category", "name", "suffix");
var startDate = DateTime.Now;
var endDate = DateTime.Now.AddMinutes(10);
var path = "/metrics/query";

var response = _browser.Get(path, with =>
{
with.HttpRequest();
with.Query("start", startDate.ToString());
with.Query("end", endDate.ToString());
with.Query("metrics", metric.ToParsableString());
});

Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Incorrect status code returned");
_storageEngine.Verify(x => x.ExecuteQuery(It.Is<Query>(y => y.StartDate == startDate)), Times.Once());
_storageEngine.Verify(x => x.ExecuteQuery(It.Is<Query>(y => y.EndDate == endDate)), Times.Once());
_storageEngine.Verify(x => x.ExecuteQuery(It.Is<Query>(y => y.Metrics.Contains(metric))), Times.Once());
}

当调试此测试并在 return Response.AsJson(0); 上设置断点时,我检查了参数对象并注意到 parameters.Count 为零, 并且所有 3 个值都为空。

我做错了什么?

编辑:当我在网络浏览器中打开这个端点时,同样的问题发生了。我将 0 的结果发送回我的浏览器,但在调试时我发现 NancyFX 没有识别出我指定的任何查询字符串参数。

最佳答案

lambda 的 parameters 参数包含您在 Get["/query"] 中捕获的路由参数。在这种情况下什么都没有。请参阅@thecodejunkie 的评论以了解其中存在的示例。

要获取查询参数,请使用 Request.Query。这也是一个动态的,将包含请求中的任何查询参数。像这样:

 Get["/query"] = parameters =>
{
var rawStart = Request.Query.start;
var rawEnd = Request.Query.end;
var metrics = Request.Query.metrics;

return Response.AsJson(0);
};

这也适用于您的测试。

关于c# - 为什么没有查询参数传递到我的 NancyFX 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18302891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com