2014-03-07 35 views
2

我有RequestDTO有另一個DTO在類,它看起來像這樣:ServiceStack - 路線隨着多DTO層

[Route("/TheDtoRequest", "GET")] 
[Route("/TheDtoRequest/{do_something_here_to_fill_foobar}", "GET")] 
public class TheDtoRequest 
{ 
    public string Foo { get; set; } 
    public int Bar { get; set; } 
    public FooBar Foobar { get; set; } 
} 


public class FooBar 
{ 
    public string AnotherFoo {get; set;} 
    public int AnotherBar {get; set;} 
} 

如何我可以AnotherFoo參數請求?

回答

2

您可以使用JSV格式將您的GET請求中的FooBar參數填充到/TheDtoRequest。你可以學到JSV format here。 JSV格式(即類似JSON的分隔值)是一種JSON啓發式格式,它使用CSV風格的轉義以最小的開銷和最佳性能。

/TheDtoRequest美孚=你好&酒吧= 1 & FooBar的= {AnotherFoo:的HelloWorld,AnotherBar:123}

所以被填充此查詢到/TheDtoRequest路線導致類。但是你也可以在路由中使用JSV。因此,考慮這條路線:

/TheDtoRequest/{Foobar的}

會導致相同的填充對象查詢:

/TheDtoRequest/{AnotherFoo:HelloWorld的,AnotherBar:123 }富=您好&酒吧= 1

或者這條路?

/TheDtoRequest/{美孚}/{酒吧}/{Foobar的}

/TheDtoRequest /你好/ 1/{AnotherFoo:的HelloWorld,AnotherBar:123}

有一個很好的例子的more complex object represented as JSV here

希望這會有所幫助。

+0

那麼,這是做技巧!順便說一句,如果我直接使用這樣的:/ TheDtoRequest/{AnotherFoo:HelloWorld,AnotherBar:123}它會拋出你有潛在危險的請求。 – reptildarat

+0

@reptildarat這是一個IIS錯誤,你可以關閉它。我沒有看到,因爲我使用自託管應用程序。應該足夠安全的禁用ServiceStack處理的路由的檢查,因爲它會解析JSV,並且應該罰款任何不良的事情。但很高興它的工作。 – Scott