405 Method Not Allowed - 当从 jQuery 发送对象到 rest WCF
Posted
技术标签:
【中文标题】405 Method Not Allowed - 当从 jQuery 发送对象到 rest WCF【英文标题】:405 Method Not Allowed - when sending object from jQuery to rest WCF 【发布时间】:2019-08-10 19:26:13 【问题描述】:这个问题被问了很多,但即使我尝试了他们提供的解决方案,我仍然得到一个错误。
我正在发送一个带有 Person 对象作为参数的发布请求,但我得到:
405 - 方法不允许错误"
代码:
合同:
[ServiceContract]
public interface IPayMentService
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/AddPerson",
BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
void AddPerson(Person person);
[DataContract]
public class Person
[DataMember]
public int Id get; set;
[DataMember]
public int Age get; set;
[DataMember]
public String Name get; set;
服务:
public class PayMentService : IPayMentService
public void AddPerson(Person person)
//..logic
客户:
$(document).ready(function()
var person = Id: 1, Age : 13, Name: "zag";
$.ajax(
url: 'http://localhost:64858/PayMentService.svc/AddPerson',
type: 'POST',
contentType: "application/json",
data: JSON.stringify(person),
dataType: 'json'
)
);
谢谢,
【问题讨论】:
你在使用 IIS 吗? 我正在使用 IIS express 405 Error upon moving MVC 4 application and WCF service to IIS 8的可能重复 请先尝试副本中的每个建议,然后再说副本不起作用。 【参考方案1】:尝试在 global.asax 文件中使用此代码:
protected void Application_BeginRequest(object sender, EventArgs e)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
【讨论】:
【参考方案2】:如果您的 Option 请求没有返回合适的状态,该请求也会失败。 为确保选项请求返回 200 状态,您最好更改状态码。 您也可以在 web.config 中添加这些标头。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="*"/>
</customHeaders>
</httpProtocol>
</system.webServer>
protected void Application_EndRequest(object sender, EventArgs e)
if(HttpContext.Current.Request.HttpMethod == "OPTIONS")
HttpContext.Current.Response.StatusCode = 200;
如果你对跨域请求不熟悉,可以参考mdn
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
【讨论】:
以上是关于405 Method Not Allowed - 当从 jQuery 发送对象到 rest WCF的主要内容,如果未能解决你的问题,请参考以下文章
jersey中的405错误 method not allowed
报错:get 。。。405 (Method Not Allowed)
为啥此请求返回 405 Method Not Allowed?