Bir WCF REST çağrısında istenen kaynağın bulunmaması gibi bir şeyler ters giderse, OperationContract yöntemimde HTTP yanıt koduyla (örneğin HTTP 404 gibi bir şeye ayarlayarak) nasıl oynayabilirim?
Bir WCF REST çağrısında istenen kaynağın bulunmaması gibi bir şeyler ters giderse, OperationContract yöntemimde HTTP yanıt koduyla (örneğin HTTP 404 gibi bir şeye ayarlayarak) nasıl oynayabilirim?
Yanıtlar:
Erişebileceğiniz bir WebOperationContext
var ve ayarlanabilen bir OutgoingResponse
özelliği olan tipte OutgoingWebResponseContext
bir StatusCode
özelliği var.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
Ancak a atmak işe yarıyor gibi görünüyor.
Bir neden gövdesi döndürmeniz gerekiyorsa, WebFaultException'a bir göz atın .
Örneğin
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
döndürmek için a atar mıydınız HttpStatusCode.Created
?
404 için, WebOperationContext.Current.OutgoingResponse üzerinde , durum kodunu 404'e ayarlayacak olan SetStatusAsNotFound (string message) adında yerleşik bir yöntem ve bir çağrı ile bir durum açıklaması vardır.
Ayrıca, durum kodunu 201'e ve konum başlığını bir çağrı ile ayarlayacak SetStatusAsCreated (Uri konumu) olduğunu unutmayın.
Başlıkta durum açıklamasını görmek isterseniz, REST yöntemi aşağıdaki gibi Catch () bölümünden null döndürdüğünüzden emin olmalıdır:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
Ayrıca bir statuscode ve neden gövdesini dönebilirsiniz WebOperationContext 'ın statusCode ve DurumuAçıklama :
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());
Bu, WCF Veri Hizmetleri için benim için işe yaramadı. Bunun yerine, Data Services durumunda DataServiceException'ı kullanabilirsiniz. Aşağıdaki gönderiyi faydalı buldum. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de