4

我试图访问南希的动态属性。在 Nancy 中,如果在查询中传递参数,它将作为动态属性出现。我怎样才能访问它。

有很多关于这个的讨论/问题,但在任何地方,首先是创建动态然后使用它。我如何消费已经创建的内容?

这是两个代码片段

public class ParameterModule : NancyModule
    {
        public ParameterModule():base("/{about}")
        {
            this.Get["/"] = (parameters) => "Hello About" + parameters.about;
        }
    }

对于 F#

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> "Hello" + parameters?("about") :> obj

我无法访问,因为对象没有该属性。

如果需要任何进一步的信息,请告诉我。

4

3 回答 3

10

F# 动态运算符(?)允许您在不使用引号的情况下传递字符串参数,实现与 C# 动态类似的语法,但您需要首先为您的具体用例定义它,编译器只提供语法。尝试这个:

let (?) (parameters:obj) param =
    (parameters :?> Nancy.DynamicDictionary).[param]

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> sprintf "Hello %O" parameters?about :> obj
于 2013-07-15T12:33:39.323 回答
1

我通过类型转换为动态字典解决了问题。如果有更好的方法请告诉我。将保持问题开放到那时......

这是解决问题的代码

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> (parameters :?> Nancy.DynamicDictionary).["about"].ToString() :> obj
于 2013-07-14T15:51:08.903 回答
1

也许这可以让你开始http://hubfs.net/topic/None/74053

于 2013-07-14T15:54:42.543 回答