NetworkError:WCF 中不允许使用 405 方法

Posted

技术标签:

【中文标题】NetworkError:WCF 中不允许使用 405 方法【英文标题】:NetworkError: 405 Method Not Allowed in WCF 【发布时间】:2013-01-27 11:42:38 【问题描述】:

我正在尝试使用 Jquery ajax 调用来调用 WCF REST 服务方法并收到类似的错误

"NetworkError: 405 Method Not Allowed - http://localhost:55911/Service1.svc/Testing"

这是我的代码

  $(document).ready(function () 
            $("#Button2").click(function () 
                 var Input = 
                     UserId: "11111"
                             ;
                $.ajax(
                    type: "POST",
                    url: " http://localhost:55911/Service1.svc/Testing",
                    data: JSON.stringify(Input),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) 
                        alert("Success");
                    ,
                    error: function (xhr, status, error) 
                        alert("failure");
                        alert(stattus.toString);
                    
                );

            );
        );

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Testing", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string Testing(int UserId);

  public string Testing(int UserId)
        
            sqlConn = new SqlConnection(connectionString);
            sqlConn.Open();
            sqlCmd = new SqlCommand("TestInsertion", sqlConn);
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.Add("@id",UserId);
            sqlCmd.ExecuteNonQuery();
            sqlConn.Close();
            return "true";
        

我在这里做错了什么??有什么建议吗??

编辑:在评论//contentType: "application/json" 后,它正在发布和投掷

"NetworkError: 400 Bad Request - http://localhost:55911/Service1.svc/Testing"

【问题讨论】:

我现在很困惑。您是在尝试使用 WCF 还是在尝试使用 Web API。因为你有两者的语法,它们不兼容。 @Aron 我只使用 WCF..哪一个是 Web API 语法?? Web 调用是一个 Web api 属性。我建议您是否想使用该语法切换到使用 asp.net MVC 并创建一个 Web api 控制器。 PS web 调用可能对你的 wcf 合约没有任何作用。 @Rooney 检查我更新的answer。 【参考方案1】: 请检查客户端的HTTP请求方法是POST (html) 和服务器上 (WCF service) 因为 NetworkError 405 status 表明调用代码 (html) 使用了错误的 HTTP 方法,WCF service 工作正常。

请参考:405 Method Not Allowed Error in WCF

更新

我相信是保留其余的东西(也是内容类型contentType: "application/json"),因为它只是将参数类型从int 中的WCF service 更改为string

    public string Testing(string UserId)
    
        sqlConn = new SqlConnection(connectionString);
        sqlConn.Open();
        sqlCmd = new SqlCommand("TestInsertion", sqlConn);
        sqlCmd.CommandType = CommandType.StoredProcedure;
        sqlCmd.Parameters.Add("@id",UserId);
        sqlCmd.ExecuteNonQuery();
        sqlConn.Close();
        return "true";
    

【讨论】:

不,它仍然不工作..但它在 Firefox RESTclient 中工作 @Rooney 你能提供你更新的 javascrpt/jquery 代码吗?当它在 FF RESTclient 中不工作和工作时,错误消息是什么? @Rooney 或者你找到解决方案了吗? :我正在使用 Firefox 检查我的应用程序。它仍然无法在 Firefox 中运行,但在 IE 中运行 什么是错误信息?可以检查FF中的错误控制台(使用ctrl + shift + J【参考方案2】:

你定义的UriTemplate是错误的,试试这样使用:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Testing?U=UserId", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string Testing(string UserId);

然后在实现中将 UserId 转换为你想要的 int。

【讨论】:

【参考方案3】:

通常当您的方法抛出异常时会发生此错误,因此我建议调试

通过在

功能

Debugger.launch();

【讨论】:

【参考方案4】:

您是否同时运行 WCF 服务项目和消费项目(AJAX 调用)(在 Visual Studio 的同一实例中)?如果是这样,请尝试两个不同的 VS 实例并首先运行 WCF 项目,然后是使用项目。另外,尝试使用dataType 作为jsonp 而不是json

【讨论】:

无需评论contentType。正如 Harsh 还提到的,您不能放置 int 类型参数。所以,把它改成string【参考方案5】:

检查 HTTP 请求方法是 POST 还是 OPTIONS。这个link 会很有用。

【讨论】:

【参考方案6】:

我认为您需要使用 JSONP 进行跨域调用以绕过浏览器限制

这个答案很有帮助:WCF error : 405 Method Not Allowed

【讨论】:

以上是关于NetworkError:WCF 中不允许使用 405 方法的主要内容,如果未能解决你的问题,请参考以下文章

尝试获取资源时出现 Blazor WASM NetworkError。 “CORS 缺少允许来源”

更新服务参考在 WCF 中不起作用

异步 Web 请求在 WCF 中不起作用

WCF:指定的注册表项在 base.Channel 调用中不存在

具有自定义 WCF 4.5 WebHttpBehavior 的 UriTemplates

多个保护级别在 WCF 中不起作用