首页 文章

来自jquery的Restful Service调用的状态代码405

提问于
浏览
2

我创建了一个宁静的服务,并试图从网页上调用它 . 但我得到 error code 405.

the same rest service call works fine with soap UI

下面是wevservice和jquery调用的详细信息

webservice api

[OperationContract] [WebInvoke(Method =“POST”,ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json,UriTemplate =“PostMethodWithCustomerArray”)] List PostMethodWithCustomerArray(List dataStrings);

Webservice code

public List<CustomerWithArray> PostMethodWithCustomerArray(List<CustomerWithArray> dataStrings)
    {
        return dataStrings;
    }

ajax call

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 Config sections

<?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>

对此有任何帮助????

Error using Google crome developer tools

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

2 回答

  • 0

    这对于您的数据有效负载(无效的json)是不正确的:

    data: JSON.stringify("Dipak Godbole")
    

    相反,你应该有

    data: JSON.stringify("{name: Dipak Godbole}")
    

    你应该查看这篇SO帖子 . 它与跨域问题有关:Post data to RESTful Invalid HTTP status code 405

  • 0

    尝试在webHttpBinding endpoints 的行为配置中添加 <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>
    

相关问题