当我向以下人员发送请求时,我收到411错误:
接口:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "IncSMS")]
string IncSMS(int ID);
方法:
public void IncSMS(int ID)
{
var business =
(from p in _db.Businesses
where p.BusinessID == ID
select p).FirstOrDefault();
business.SMSHits += 1;
_db.SaveChanges();
}
谁能明白为什么我会收到错误?所有的get方法都有效,我只能让POST或PUT工作!
任何想法???
干杯,
麦克
答案 0 :(得分:8)
代码没有任何问题,我试图通过浏览器请求PUT而无法完成。您可以通过这种方式测试GET,但不能测试PUT。 “因为默认情况下它会执行GET”!
在提琴手中,您只需在“请求构建器”的“请求标题”部分中键入Content-Length: 0
,它就会神奇地起作用!如本教程底部附近所示:http://blog.donnfelker.com/2008/12/04/how-to-rest-services-in-wcf-3-5-part-2-the-post/
谢谢你们,
麦克
答案 1 :(得分:4)
根据HTTP Standards,411表示: 10.4.12 411所需长度
服务器拒绝接受没有定义内容的请求 - 长度。如果请求添加有效,客户端可以重复该请求 Content-Length头字段,包含消息体的长度 在请求消息中。
所以看起来在通过POST / PUT添加数据之前,您需要指定数据的长度。
答案 2 :(得分:1)
WCF REST服务中的POST和PUT操作要求包含Content-Length
标头。 411响应代码是WCF,告诉您包含该标头。