gpt4 book ai didi

wcf - Nancy 路由导致 404

转载 作者:行者123 更新时间:2023-12-01 17:41:56 25 4
gpt4 key购买 nike

我继承了一个 WCF 项目,其中包含我需要迁移到新的 NancyFx 项目中的一些构建不良的路由(有效)。我需要能够在我的 Nancy 应用程序中定义响应相同 GET 请求的路由。我暂时不能改变路线。

在WCF项目中,一个GET请求...

http://localhost:12345/webapi/GetUsers?UserId=567&Language=en

匹配这个 UriTemplate:

UriTemplate = "GetUsers?UserId={userId}&Language={language}


我希望这在 Nancy 中是等价的

Get["/GetUsers?UserId={userId}&Language={language}"] = p => { ... }

但相同的 GET 请求会导致 404。

有没有办法构造我的 Nancy 路由来响应此 GET 请求?如果没有,是否有任何解决方法?

我知道这很糟糕,但它是暂时的,直到我可以安排时间与我们的 UI 团队重写前端以调用正确的 rest-full URL。

最佳答案

约翰,

您的路线是 /GetUsers(顺便说一下,您如何处理 /webapi 部分?这是您应用程序的基本 url 还是您正在设置一个模块路径?),您将使用 Request.Query 成员读取查询字符串。

Query 属性返回一个 DynamicDictionary,它使您能够以属性 Request.Query.UserId 或字典 Request.Query["UserId"]

您不能使查询字符串成为需要匹配的模式的一部分,以便调用路由。如果你真的想要,你可以做的是使用路由条件,这是路由声明中的第二个参数。这使您可以控制谓词,该谓词确定路由是否可以使用。所以你可以做这样的事情

Get["/GetUsers", ctx => ctx.Request.Query.UserId.HasValue && ctx.Request.Query.Language.HasValue] = p {... }

然后您可以将它全部重构为一个扩展方法,在 NancyContext 上,这使它更整洁一些

Get["/GetUsers", ctx => ctx.HasQueryValues("UserId", "Language")] = p {... }

并使扩展类似于

public static bool HasQueryValues(this NancyContext context, params string[] values)
{
return values.All(x => context.Request.Query[x].HasValue);
}

希望这对您有所帮助!

关于wcf - Nancy 路由导致 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537816/

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