簡體   English   中英

wcf 獲取方法 - 如何綁定查看 model?

[英]wcf get method - how to bind to view model?

這是我在服務合同中的內容:

[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, 
           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
string HelloWorld(HelloWorldViewModel vm);

其中HelloWorldViewModel具有屬性XY

如果我執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM