2010-09-30 69 views
2

有人可以解釋這個背後的原因或它是如何工作的?如果我在下面做一個WebInvoke,它會失敗(說方法不允許,但是如果我做了一個WebGet,它會通過)。我只是想明白爲什麼?爲什麼WebInvoke不允許使用此方法,但對於WebGet可以嗎?

[OperationContract] 
[WebGet(UriTemplate = "login/{username}/{password}", ResponseFormat = 
                 WebMessageFormat.Json)] 
string Login(string username, string password); 

上面的代碼,只是返回一個硬編碼的字符串。 (沒有條件邏輯)

回答

11

編輯:有些現在我已經重讀的問題改寫......

WebInvoke允許你指定哪個動詞將被允許,默認爲POST。 WebGet要求客戶端使用GET請求。在任何一種情況下,如果使用了錯誤的動詞,你會得到「方法不允許」。您正在使用瀏覽器,因此它正在發出GET請求,所以普通的僅限POST的WebInvoke會拒絕它,而WebGet會允許它。當然,您可以在WebInvoke屬性聲明中指定Method="GET"以允許GET。

+0

你是什麼意思的客戶?我只是使用網址爲http:// localhost:8080/login/user/pass的網絡瀏覽器。 – Xaisoft 2010-09-30 23:07:47

+0

@ Xaisoft,我相信喬恩有倒退,但他答案的實質是正確的。如果你只是通過瀏覽器訪問它,那當然是一個GET請求。默認情況下,WebInvoke只允許POST請求,因此在從瀏覽器訪問時會失敗。 – 2010-10-01 00:20:07

+0

@ Xaisoft,Kirk:是的,我會誤解這個問題 - 現在我已經改寫了答案,以便更清楚一些。 – 2010-10-01 05:26:16

相關問題