예제 #1
0
        /// <summary>
        /// Gets an instance of ZentityService which can handle the specified Http request.
        /// </summary>
        /// <param name="context">An instance of HttpContext containing request details.</param>
        /// <returns>An instance of ZentityService responsible for handling the specified request.</returns>
        /// <remarks>Returns null, if the ServiceFactory could not find any service
        /// which can handle the give request.</remarks>
        public static IZentityService GetServiceInstance(HttpContext context)
        {
            IZentityService service = null;

            string serviceType = GetServiceType(context.Request.Url);

            switch (serviceType)
            {
            case AtomPub:
                service = new AtomPubService();
                break;

            case Sword:
                service = new SwordService();
                break;

            case Pmh:
                service = new OaiPmhService();
                break;

            case Ore:
                service = new OreService();
                break;

            case Syndication:
                service = new SyndicationService();
                break;

            default:
                service = null;
                break;
            }

            return(service);
        }
예제 #2
0
        /// <summary>
        /// Handles the Http requests.
        /// </summary>
        /// <param name="context">An instance of HttpContext containing request details.</param>
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                IZentityService service = ServiceFactory.GetServiceInstance(context);

                if (null == service)
                {
                    context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    context.Response.Write(Properties.Resources.COULD_NOT_HANDLE_REQUEST);
                    return;
                }

                string error;

                if (service.ValidateRequest(context, out error))
                {
                    HttpStatusCode statusCode;
                    string         responseString = service.ProcessRequest(context,
                                                                           out statusCode);
                    context.Response.StatusCode   = (int)statusCode;
                    context.Response.BufferOutput = true;
                    context.Response.Write(responseString);
                }
                else
                {
                    context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    context.Response.Write(error);
                }

                if (context.Items.Contains("AuthenticatedToken"))
                {
                    context.Items.Remove("AuthenticatedToken");
                }
            }
            //We don't want to throw any error to user. instead we throw 500 (Internal server error)
            catch (Exception)
            {
                context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                context.Response.Write(Properties.Resources.INTERNAL_SERVER_ERROR);
            }
        }