我有一个使用MVC和WebAPI2的Web应用程序.在匹配手动配置的MVC路由之前,我希望始终与WebAPI2属性路由匹配.我在打电话configuration.MapHttpAttributeRoutes()之前试过打电话,RouteConfig.RegisterRoutes(RouteTable.Routes)但这似乎不起作用.
有没有办法确保WebAPI2路由始终具有优先权?
我今天注意到Newtonsoft.Json的一些奇怪的输出,我不确定它是否与F#类型的交互或C#中可能发生的事情,所以我已经标记了两者.我有一个序列化的以下记录列表:
type SplitTracker =
{
[<JsonIgnore>]
split : SplitDefinition
mutable start : duration
mutable ``end`` : duration
mutable lapCount : int
mutable duration : duration Option
}
Run Code Online (Sandbox Code Playgroud)
我序列化它,JsonConvert.SerializeObject 我得到以下奇数输出:
"splits": [
{
"start@": "0.00",
"end@": "0.00",
"lapCount@": 0,
"duration@": null,
"start": "0.00",
"end": "0.00",
"lapCount": 0,
"duration": null
},
{
"start@": "0.00",
"end@": "0.00",
"lapCount@": 0,
"duration@": null,
"start": "0.00",
"end": "0.00",
"lapCount": 0,
"duration": null
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么会发生这种情况?数据是正确的,带有"@"符号的字段重复是问题.
如果我传递对象的引用,但是不接受结构或基元,则以下f#函数效果很好:
let TryGetFromSession (entryType:EntryType, key, [<Out>] outValue: 'T byref) =
match HttpContext.Current.Session.[entryType.ToString + key] with
| null -> outValue <- null; false
| result -> outValue <- result :?> 'T; true
Run Code Online (Sandbox Code Playgroud)
如果我尝试用C#调用它:
bool result = false;
TryGetFromSession(TheOneCache.EntryType.SQL,key,out result)
Run Code Online (Sandbox Code Playgroud)
我知道The Type bool must be a reference type in order to use it as a parameter 有没有办法让F#函数同时处理?
我在做一些F#实验时注意到,如果为Array编写我自己的reduce函数,它的执行效果要比内置的reduce更好.例如:
type Array with
static member inline fastReduce f (values : 'T[]) =
let mutable result = Unchecked.defaultof<'T>
for i in 0 .. values.Length-1 do
result <- f result values.[i]
result
Run Code Online (Sandbox Code Playgroud)
这似乎与内置的行为完全相同,Array.reduce但简单快了约2倍f
内置的一个更灵活吗?
我使用XmlProvider提取一些XML数据,我将从C#访问它.由于您不能直接从C#使用类型提供的字段,我需要创建它们的记录.我可以手工完成这个,但我相信这应该可以自动使用反射.如果我创建记录类型具有相同的名称和类型,在类型提供商的领域,我应该能够使用像FSharpValue.MakeRecord(typeof<MyType>,values) 这里values是对象的数组.
我不知道的是如何从类型提供程序中获取值数组,以及如何处理嵌套记录,例如:
type Address =
{
Address1 : string
City : string
State : string
}
type Client =
{
Id : int
FullName : string
Address : Address
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,客户端包含一个地址 我是否需要走树并在树叶上使用MakeRecord并继续工作?