[英]wcf get method - how to bind to view model?
這是我在服務合同中的內容:
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
string HelloWorld(HelloWorldViewModel vm);
其中HelloWorldViewModel
具有屬性X
和Y
。
如果我執行localhost/webservices/HelloWorld?X=1&Y=2
並在HelloWorld
方法中設置斷點,vm 將是 null。 它不會自動將傳入的查詢字符串參數綁定到視圖 model object 中。
我錯過了什么嗎? 謝謝!
您描述的行為是在ASP.NET MVC model binding中專門實現的。
If you want to pass a complex object to a REST service operation using the WCF Web Programming Model , you'll have to include it in its serialized form in the body of an HTTP POST request .
在您的情況下,根據放置在HelloWorld
服務操作上的屬性,請求的有效負載應如下所示(注意 XML 命名空間聲明被省略):
<HelloWorld>
<vm>
<X>1</X>
<Y>2</Y>
</vm>
</HelloWorld>
相關資源:
vm == null
是正確的。 它必須作為媒體參數發送到您的 uri,才能成為非 null。
要獲取您的參數,請嘗試檢查: WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["X"]
或...QueryParameters["Y"]
WCF [WebGet] 操作默認只支持原始類型。 如果您想添加對其他類型的支持,您可以創建一個類型轉換器或一個支持您的類型的新QueryStringConverter
。 您可以在http://blogs.msdn.com/b/carlosfigueira/archive/2011/08/09/wcf-extensibility-querystringconverter.aspx找到更多信息。
另一種選擇是在請求正文中傳遞參數,但這意味着使用“GET”以外的 HTTP 動詞,因為 GET 請求不能有正文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.