【问题标题】:Why is this method not allowed for WebInvoke, but OK for WebGet?为什么 WebInvoke 不允许使用此方法,而 WebGet 则可以?
【发布时间】:2013-08-02 20:23:41
【问题描述】:

有人可以解释这背后的原因或它是如何工作的吗?如果我在下面执行 WebInvoke,它会失败(说方法不允许,但如果我执行 WebGet,它会通过)。我只是想知道为什么?

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

上面的代码,只是返回一个硬编码的字符串。 (无条件逻辑)

【问题讨论】:

    标签: c# wcf rest


    【解决方案1】:

    编辑:重写了一些现在我已经重读了这个问题......

    WebInvoke 允许您指定允许使用的动词,默认为 POST。 WebGet 要求客户端使用 GET 请求。在任何一种情况下,如果使用了错误的动词,您将得到“方法不允许”。您正在使用浏览器,因此它正在发出 GET 请求,因此普通的 POST-only WebInvoke 会拒绝它,而 WebGet 会允许它。当然,您可以在 WebInvoke 属性声明中指定 Method="GET" 以允许 GET。

    【讨论】:

    • 客户是什么意思?我只是使用带有 URL localhost:8080/login/user/pass 的网络浏览器。
    • @Xaisoft,我相信乔恩倒退了,但他回答的实质是正确的。如果你只是通过浏览器访问它,那当然是一个 GET 请求。默认情况下,WebInvoke 只允许 POST 请求,因此从浏览器访问时会失败。
    • @Xaisoft,Kirk:是的,我误读了这个问题——我现在重写了答案,以便更清楚一点。
    • 这听起来有点违反直觉:默认情况下 WebInvoke 是一个 POST,但是通过将 Method 更改为 GET,我基本上可以让 WebInvoke 表现得像一个 WebGet。
    • @Xaisoft:我不知道为什么这是违反直觉的。将 WebGet 视为专门的 WebInvoke。
    猜你喜欢
    • 2014-06-02
    • 2011-09-04
    • 2013-09-06
    • 2012-07-10
    • 2012-04-05
    • 1970-01-01
    • 2022-01-19
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多