微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

$ .ajax POST到我的Web服务工作正常,但GET请求失败,错误405,方法不允许

如何解决$ .ajax POST到我的Web服务工作正常,但GET请求失败,错误405,方法不允许

| 一段时间以来,我一直在使用Web服务,而无论其目的是使用jquery $ .ajax类型:\“ POST \”。它总是能够完成工作,所以我从来没有真正研究过使用类型:\“ GET \”。我今天刚刚测试了\“ GET \”,因为我正在使用(EXT Gantt)的该插件要求GET,并且在Firebug中遇到了“方法不允许(405)”错误。我想我需要使我的Web服务能够接受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 :(再次,当使用类型:\“ 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\",url: \"Services/ProjectService.svc/GetAllTasks\",xhr) { }

});
Web配置
  <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>
    

解决方法

尝试将界面更改为
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json,Method=\"GET\")]
List<Task> GetAllTasks();

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。