หากมีสิ่งผิดปกติเกิดขึ้นในการเรียก WCF REST เช่นไม่พบทรัพยากรที่ร้องขอฉันจะเล่นกับรหัสตอบกลับ HTTP ได้อย่างไร (ตั้งค่าเป็น HTTP 404 เป็นต้น) ในเมธอด OperationContract ของฉัน
หากมีสิ่งผิดปกติเกิดขึ้นในการเรียก WCF REST เช่นไม่พบทรัพยากรที่ร้องขอฉันจะเล่นกับรหัสตอบกลับ HTTP ได้อย่างไร (ตั้งค่าเป็น HTTP 404 เป็นต้น) ในเมธอด OperationContract ของฉัน
คำตอบ:
มีWebOperationContext
ที่คุณสามารถเข้าถึงและมีOutgoingResponse
คุณสมบัติประเภทOutgoingWebResponseContext
ที่มีStatusCode
คุณสมบัติที่สามารถตั้งค่าได้
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
อย่างไรก็ตามการขว้างปาดูเหมือนจะได้ผล
หากคุณต้องการส่งคืนส่วนเหตุผลให้ดูที่WebFaultException
ตัวอย่างเช่น
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
จะส่งคืนHttpStatusCode.Created
หรือไม่?
สำหรับ 404 มีเมธอดในตัวบนWebOperationContext.Current.OutgoingResponse ที่เรียกว่าSetStatusAsNotFound (ข้อความสตริง)ที่จะตั้งรหัสสถานะเป็น 404 และคำอธิบายสถานะด้วยการเรียกเพียงครั้งเดียว
โปรดทราบว่ายังมีSetStatusAsCreated (ตำแหน่ง Uri)ที่จะตั้งรหัสสถานะเป็น 201 และส่วนหัวตำแหน่งด้วยการเรียกเพียงครั้งเดียว
หากคุณต้องการดูคำอธิบายสถานะในส่วนหัวเมธอด REST ควรตรวจสอบให้แน่ใจว่าได้คืนค่า null จากส่วน Catch () ดังต่อไปนี้:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
นอกจากนี้คุณยังสามารถกลับ statuscode และเหตุผลในร่างกายด้วยWebOperationContext 's StatusCodeและStatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
สิ่งนี้ไม่ได้ผลสำหรับฉันสำหรับ WCF Data Services แต่คุณสามารถใช้ DataServiceException ในกรณีของบริการข้อมูล พบว่าโพสต์ต่อไปนี้มีประโยชน์ http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de