【问题标题】:$.ajax POST to my webservice works fine but GET requests fail with error 405 Method not allowed$.ajax POST 到我的 web 服务工作正常,但 GET 请求失败,错误 405 Method not allowed
【发布时间】:2011-04-15 16:59:14
【问题描述】:

一段时间以来,无论出于何种目的,我一直在使用 Web 服务,使用 jquery $.ajax 类型:“POST”。它总是能完成工作,所以我从来没有真正考虑过使用类型:“GET”。我今天刚刚测试了“GET”,因为我正在使用的这个插件(EXT Gantt)需要 GET,并且我在 Firebug 中遇到了这个 Method Not Allowed (405) 错误。我想我需要让我的网络服务接受 GET 请求。我该怎么做?

界面:

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json)]
List<Task> GetAllTasks();

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json)]
List<Dependency> GetAllDependencies();

类:

[DataContract]
public class Task
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string StartDate { get; set; }
    [DataMember]
    public string EndDate { get; set; }
    [DataMember]
    public int PercentDone { get; set; }
    [DataMember]
    public int? ParentId { get; set; }
    [DataMember]
    public bool IsLeaf { get; set; }
    [DataMember]
    public string Responsible { get; set; }
    [DataMember]
    public int Duration { get; set; }
}

[DataContract]
public class Dependency
{
    [DataMember]
    public int From { get; set; }
    [DataMember]
    public int To { get; set; }
    [DataMember]
    public int Type { get; set; }
}

方法:

    public List<Task> GetAllTasks()
    {

        List<Task> Tasks = new List<Task>()
        {

        };

        Task temp = new Task();

        temp.Id = 0;
        temp.Name = "Planning";
        temp.StartDate = "2010-01-06T00:00:00";
        temp.EndDate = "2010-01-21T00:00:00";
        temp.PercentDone = 40;
        temp.ParentId = null;
        temp.IsLeaf = false;
        temp.Responsible = "John Doe";
        temp.Duration = 0;
        Tasks.Add(temp);

        return Tasks;
    }

    public List<Dependency> GetAllDependencies()
    {
        List<Dependency> Dependencies = new List<Dependency>()
        {

        };

        Dependency temp = new Dependency();
        temp.From = 11;
        temp.To = 12;
        temp.Type = 2;
        Dependencies.Add(temp);

        return Dependencies;
    }

Javascript/Ajax:(同样,这在使用 type:"POST" 时非常有效)

$.ajax({
    type: "GET",
    async: false,
    url: "Services/ProjectService.svc/GetAllDependencies",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data, textStatus, xhr) { }

});
$.ajax({
    type: "GET",
    async: false,
    url: "Services/ProjectService.svc/GetAllTasks",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data, textStatus, xhr) { }

});

Web.Config

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="ProjectScheduler.Services.ProjectServiceBehavior" name="ProjectScheduler.Services.ProjectService">
        <endpoint address="" behaviorConfiguration="http" binding="webHttpBinding" bindingConfiguration="" contract="ProjectScheduler.Services.IProjectService">
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>

  <bindings>
      <webHttpBinding>
          <binding name="webBinding">
              <security mode="Transport">
              </security>
          </binding>
      </webHttpBinding>
  </bindings>

<behaviors>
  <endpointBehaviors>
    <behavior name="http">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ProjectScheduler.Services.ProjectServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

【问题讨论】:

标签: c# javascript jquery ajax web-services


【解决方案1】:

尝试将界面更改为

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method="GET")]
List<Task> GetAllTasks();

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method="GET")]
List<Dependency> GetAllDependencies();

【讨论】:

  • 工作就像一个魅力!非常非常感谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多