Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / ServiceModel / Web / WebFaultException.cs / 1305376 / WebFaultException.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Web
{
using System;
using System.Runtime;
using System.Net;
using System.Runtime.Serialization;
using System.Security;
using System.Security.Permissions;
using System.ServiceModel;
using System.Globalization;
using System.Collections.Generic;
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Justification = "REST Exceptions cannot contain InnerExceptions or messages")]
public class WebFaultException : FaultException, IWebFaultException
{
internal const string WebFaultCodeNamespace = "http://schemas.microsoft.com/2009/WebFault";
public WebFaultException(HttpStatusCode statusCode)
: base(GetDefaultReason(statusCode), GetFaultCode(statusCode))
{
this.StatusCode = statusCode;
}
protected WebFaultException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
this.StatusCode = (HttpStatusCode)info.GetValue("statusCode", typeof(HttpStatusCode));
}
public HttpStatusCode StatusCode { get; private set; }
Type IWebFaultException.DetailType
{
get { return null; }
}
object IWebFaultException.DetailObject
{
get { return null; }
}
Type[] IWebFaultException.KnownTypes
{
get { return null; }
}
[Fx.Tag.SecurityNote(Critical = "Overrides the base.GetObjectData which is critical, as well as calling this method.", Safe = "Replicates the LinkDemand.")]
[SecurityCritical]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("statusCode", this.StatusCode);
}
internal static FaultCode GetFaultCode(HttpStatusCode statusCode)
{
if ((int) statusCode >= (int) HttpStatusCode.InternalServerError)
{
return FaultCode.CreateReceiverFaultCode(statusCode.ToString(), WebFaultCodeNamespace);
}
else
{
return FaultCode.CreateSenderFaultCode(statusCode.ToString(), WebFaultCodeNamespace);
}
}
// These reasons come from section 6.1.1 of http://www.ietf.org/rfc/rfc2616.txt
internal static string GetDefaultReason(HttpStatusCode statusCode)
{
switch ((int)statusCode)
{
case 100: return "Continue";
case 101: return "Switching Protocols";
case 200: return "OK";
case 201: return "Created";
case 202: return "Accepted";
case 203: return "Non-Authoritative Information";
case 204: return "No Content";
case 205: return "Reset Content";
case 206: return "Partial Content";
case 300: return "Multiple Choices";
case 301: return "Moved Permanently";
case 302: return "Found";
case 303: return "See Other";
case 304: return "Not Modified";
case 305: return "Use Proxy";
case 307: return "Temporary Redirect";
case 400: return "Bad Request";
case 401: return "Unauthorized";
case 402: return "Payment Required";
case 403: return "Forbidden";
case 404: return "Not Found";
case 405: return "Method Not Allowed";
case 406: return "Not Acceptable";
case 407: return "Proxy Authentication Required";
case 408: return "Request Time-out";
case 409: return "Conflict";
case 410: return "Gone";
case 411: return "Length Required";
case 412: return "Precondition Failed";
case 413: return "Request Entity Too Large";
case 414: return "Request-URI Too Large";
case 415: return "Unsupported Media Type";
case 416: return "Requested range not satisfiable";
case 417: return "Expectation Failed";
case 500: return "Internal Server Error";
case 501: return "Not Implemented";
case 502: return "Bad Gateway";
case 503: return "Service Unavailable";
case 504: return "Gateway Time-out";
case 505: return "HTTP Version not supported";
default:
{
int errorClass = ((int)statusCode) / 100;
switch (errorClass)
{
case 1: return "Informational";
case 2: return "Success";
case 3: return "Redirection";
case 4: return "Client Error";
case 5: return "Server Error";
default: return null;
}
}
}
}
}
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Justification = "REST Exceptions cannot contain InnerExceptions or messages")]
public class WebFaultException : FaultException, IWebFaultException
{
Type[] knownTypes;
public WebFaultException(T detail, HttpStatusCode statusCode)
: base(detail, WebFaultException.GetDefaultReason(statusCode), WebFaultException.GetFaultCode(statusCode))
{
this.StatusCode = statusCode;
}
public WebFaultException(T detail, HttpStatusCode statusCode, IEnumerable knownTypes)
: base(detail, WebFaultException.GetDefaultReason(statusCode), WebFaultException.GetFaultCode(statusCode))
{
this.StatusCode = statusCode;
this.knownTypes = (knownTypes == null) ? null : new List(knownTypes).ToArray();
}
protected WebFaultException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
this.StatusCode = (HttpStatusCode)info.GetValue("statusCode", typeof(HttpStatusCode));
this.knownTypes = (Type[])info.GetValue("knownTypes", typeof(Type[]));
}
public HttpStatusCode StatusCode { get; private set; }
Type IWebFaultException.DetailType
{
get { return typeof(T); }
}
object IWebFaultException.DetailObject
{
get { return this.Detail; }
}
Type[] IWebFaultException.KnownTypes
{
get { return this.knownTypes; }
}
[Fx.Tag.SecurityNote(Critical = "Overrides the base.GetObjectData which is critical, as well as calling this method.", Safe = "Replicates the LinkDemand.")]
[SecurityCritical]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("statusCode", this.StatusCode);
info.AddValue("knownTypes", this.knownTypes);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ObjectFactoryCodeDomTreeGenerator.cs
- XmlWrappingReader.cs
- ProcessManager.cs
- WebPartConnectionsCancelVerb.cs
- TypeSystem.cs
- Stroke.cs
- HttpCacheVary.cs
- StylusPoint.cs
- MatrixAnimationUsingKeyFrames.cs
- RectAnimationBase.cs
- MethodAccessException.cs
- SystemIcmpV6Statistics.cs
- StylusPointDescription.cs
- EpmContentSerializer.cs
- ListViewDeleteEventArgs.cs
- DrawingBrush.cs
- LocalValueEnumerator.cs
- UrlMappingsModule.cs
- Int64Animation.cs
- AddInIpcChannel.cs
- WeakReferenceEnumerator.cs
- SafeFileMappingHandle.cs
- XmlSchemaSimpleContentRestriction.cs
- TextEndOfParagraph.cs
- HashAlgorithm.cs
- EncryptedData.cs
- CompiledXpathExpr.cs
- StylesEditorDialog.cs
- ConversionContext.cs
- IntSecurity.cs
- BufferedStream2.cs
- MaskInputRejectedEventArgs.cs
- ProfileEventArgs.cs
- ComponentResourceManager.cs
- Light.cs
- XmlCharCheckingReader.cs
- RSAPKCS1KeyExchangeFormatter.cs
- AppDomainInfo.cs
- BindingExpressionUncommonField.cs
- MailDefinitionBodyFileNameEditor.cs
- VirtualPathUtility.cs
- XmlHierarchicalDataSourceView.cs
- Html32TextWriter.cs
- Expander.cs
- HTTP_SERVICE_CONFIG_URLACL_KEY.cs
- TakeQueryOptionExpression.cs
- SqlUnionizer.cs
- FastEncoderStatics.cs
- HandlerMappingMemo.cs
- SqlBuilder.cs
- DataServiceRequestException.cs
- ObjectDataSourceView.cs
- NumberSubstitution.cs
- NotSupportedException.cs
- IisTraceWebEventProvider.cs
- IxmlLineInfo.cs
- PreviewKeyDownEventArgs.cs
- BinaryReader.cs
- HttpResponseHeader.cs
- EntityType.cs
- RegionInfo.cs
- KeyConstraint.cs
- PoisonMessageException.cs
- CodeLabeledStatement.cs
- UndirectedGraph.cs
- MenuRenderer.cs
- QueuePathDialog.cs
- EventLogConfiguration.cs
- StringSorter.cs
- SqlErrorCollection.cs
- InstanceDataCollectionCollection.cs
- ResourceSetExpression.cs
- TdsParserStaticMethods.cs
- SignatureToken.cs
- XpsFixedDocumentSequenceReaderWriter.cs
- WindowsListViewGroupSubsetLink.cs
- ICspAsymmetricAlgorithm.cs
- ToolBarButtonClickEvent.cs
- ItemType.cs
- SendContent.cs
- MimeFormatExtensions.cs
- ReadOnlyMetadataCollection.cs
- DataSourceXmlAttributeAttribute.cs
- StrongNameUtility.cs
- StickyNote.cs
- TextElementCollection.cs
- PaintValueEventArgs.cs
- DataGridViewSortCompareEventArgs.cs
- VariantWrapper.cs
- PrintDialogException.cs
- InkCanvasSelection.cs
- NavigationPropertyEmitter.cs
- TrustSection.cs
- ReadOnlyCollection.cs
- PointF.cs
- SettingsPropertyWrongTypeException.cs
- Form.cs
- InfoCardRSACryptoProvider.cs
- FacetEnabledSchemaElement.cs
- StringExpressionSet.cs