我创建了一个宁静的服务,并试图从网页上调用它。但我收到错误代码405。
相同的休息服务调用与肥皂UI工作正常
下面是wevservice和jquery调用的详细信息
webservice api
[OperationContract] [WebInvoke(Method =“POST”,ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json,UriTemplate =“PostMethodWithCustomerArray”)] List PostMethodWithCustomerArray(List dataStrings);
Web服务代码
public List<CustomerWithArray> PostMethodWithCustomerArray(List<CustomerWithArray> dataStrings)
{
return dataStrings;
}
ajax电话
var UrlPostMethodWithCustomerArray = "http://localhost:29745/RESTfulService.svc/PostMethodWithCustomerArray";
var customerWithArray = [{ "Name": "Dipak Godbole", "Age": "27", "HumanType": "1", "strArray": ["11", "22"] },
{ "Name": "Madan Chapa", "Age": "19", "HumanType": "3", "strArray": ["111", "222"] },
{ "Name": "Raju Rohida", "Age": "55", "HumanType": "2", "strArray": ["1111", "2222"] }];
$(document).ready(function () {
$.ajax({
cache: false,
type: "POST", //GET or POST or PUT or DELETE verb
url: UrlPostMethodWithparam, // Location of the service
data: JSON.stringify(customerWithArray),
dataType: "json", //Expected data format from server
contentType: "application/json; charset=utf-8",
success: function (msg) {//On Successfull service call
$.each(msg, function (index, item) {
alert(item.Name + item.HumanType);
});
//alert(msg);
},
error: ServiceFailed// When Service call fails
});
});
Web配置部分
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<services>
<service name="TrialRESTService.RESTfulService" behaviorConfiguration="svcbehaviour">
<endpoint address=""
binding="webHttpBinding"
contract="TrialRESTService.IRESTfulService"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="svcbehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior>
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST,GET"/>
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
对此有任何帮助????
使用Google Chrome开发人员工具时出错
OPTIONS
http://localhost:29745/RESTfulService.svc/PostMethodWithCustomerArray
405 (Method Not Allowed) jquery-1.8.2.min.js:19
XMLHttpRequest cannot load http://localhost:29745/RESTfulService.svc/PostMethodWithCustomerArray. Invalid HTTP status code 405 Default.aspx:1
这对于您的数据有效负载(无效的json)是不正确的:
data: JSON.stringify("Dipak Godbole")
相反,你应该有
data: JSON.stringify("{name: Dipak Godbole}")
你应该查看这篇SO帖子。它与跨领域问题有关:Post data to RESTful Invalid HTTP status code 405
尝试在webHttpBinding端点的行为配置中添加<enableWebScript/>
,如下例所示。
<system.serviceModel>
<services>
<service name="WCF.TestWCF" behaviorConfiguration="TestWCFBehaviour">
<endpoint address="" binding="webHttpBinding" contract="WCF.ITestWCF" behaviorConfiguration="TestWCFEndPointBehaviour"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestWCFBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="TestWCFEndPointBehaviour">
<enableWebScript/>
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>