كيف يمكنني إرجاع رمز حالة HTTP مخصص من طريقة WCF REST؟

StackOverflow https://stackoverflow.com/questions/140104

  •  02-07-2019
  •  | 
  •  

سؤال

إذا حدث خطأ ما في استدعاء WCF REST، مثل عدم العثور على المورد المطلوب، فكيف يمكنني اللعب برمز استجابة HTTP (ضبطه على شيء مثل HTTP 404، على سبيل المثال) في طريقة OperationContract الخاصة بي؟

هل كانت مفيدة؟

المحلول

هناك WebOperationContext التي يمكنك الوصول إليها ولها OutgoingResponse خاصية النوع OutgoingWebResponseContext الذي لديه StatusCode الخاصية التي يمكن تعيينها.

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

نصائح أخرى

إذا كنت بحاجة إلى إرجاع نص السبب، فقم بإلقاء نظرة عليه WebFaultException

على سبيل المثال

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );

بالنسبة إلى 404، هناك طريقة مضمنة في WebOperationContext.Current.OutgoingResponse مُسَمًّى SetStatusAsNotFound (رسالة سلسلة) سيؤدي ذلك إلى تعيين رمز الحالة على 404 ووصف الحالة بمكالمة واحدة.

لاحظ أن هناك أيضا، SetStatusAsCreated(موقع Uri) سيؤدي ذلك إلى تعيين رمز الحالة على 201 ورأس الموقع بمكالمة واحدة.

إذا كنت ترغب في رؤية وصف الحالة في الرأس، فيجب أن تتأكد طريقة REST من إرجاع قيمة فارغة من قسم Catch() على النحو التالي:

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());

المرجع:https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf

يمكنك أيضًا إرجاع رمز الحالة ونص السبب باستخدام WebOperationContextرمز الحالة و وصف الحالة:

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";

هذا لم ينجح بالنسبة لي بالنسبة لخدمات بيانات WCF.بدلاً من ذلك، يمكنك استخدام DataServiceException في حالة خدمات البيانات.وجدت المشاركة التالية مفيدة.http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top