コード例 #1
0
        protected void HandleResponse(Response r, ExecuteWebRequestEventArgs args)
        {
            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                IsExecutingRequest = false;
                StatusLine         = string.Format("{0} {1}", (int)r.StatusCode, r.StatusCode.ToString());
                PreviousStatusLine = null;

                if (args.OnSuccess != null)
                {
                    args.OnSuccess(r);
                }

                if (ContentRender is IDisposable)
                {
                    ((IDisposable)ContentRender).Dispose();
                }

                // In case of "201 Created" with Location header: GET new location (but keep same success/failure handlers)
                if (r.CreatedLocation != null)
                {
                    Request req = r.CreatedLocation.Follow(r.Session).Method("GET");
                    ExecuteWebRequestEventArgs args2 = new ExecuteWebRequestEventArgs(r.Session, req)
                    {
                        OnSuccess = args.OnSuccess,
                        OnFailure = args.OnFailure
                    };
                    ExecuteWebRequest(args2);
                    return;
                }

                RenderResponse(r);
            }));
        }
コード例 #2
0
        protected void ExecuteWebRequest(ExecuteWebRequestEventArgs args)
        {
            IsExecutingRequest = true;

            if (CurrentRequest != null)
            {
                CurrentRequest.CancelAsync();
                CurrentRequest = null;
            }

            try
            {
                if (SettingsReader.Get(() => Properties.Settings.Default.PreferMinimalResponseSize, false))
                {
                    args.Request.Header("Prefer", "return=minimal");
                }

                if (SettingsReader.Get(() => Properties.Settings.Default.UseMethodOverride, false) && args.Session.RequestInterceptors.Find("MethodOverrideInterceptor") == null)
                {
                    args.Session.RequestInterceptors.Add("MethodOverrideInterceptor", new MethodOverrideInterceptor());
                }

                args.Request
                .Accept("application/vnd.mason+json", 1)
                .Accept("*/*", 0.5)
                .Async()
                .OnError(r => HandleResponseError(r, args))
                .OnComplete(() => CurrentRequest = null)
                .Submit(r => HandleResponse(r, args));

                CurrentRequest = args.Request;
            }
            catch (Exception ex)
            {
                IsExecutingRequest = false;
                Logger.Error(ex);
                MessageBox.Show(GetOwnerWindow(), ex.Message, "Failed to setup request");
            }
        }
コード例 #3
0
        protected void HandleResponseError(AsyncError err, ExecuteWebRequestEventArgs args)
        {
            Logger.Error("Error in response handling", err.Exception);

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                IsExecutingRequest = false;

                if (err.Response.WebResponse != null)
                {
                    StatusLine = string.Format("{0} {1}", (int)err.Response.StatusCode, err.Response.StatusCode.ToString());
                }
                else if (err.Exception != null)
                {
                    StatusLine = err.Exception.Message;
                }
                else
                {
                    StatusLine = "Unknown error";
                }

                PreviousStatusLine = null;

                if (args.OnFailure != null)
                {
                    args.OnFailure(err.Response);
                }

                RenderResponse(err.Response);
                MessageBox.Show(GetOwnerWindow(), err.Exception.Message);

                if (err.Response != null)
                {
                    TryHandleAuthorization(err.Response);
                }
            }));
        }
コード例 #4
0
ファイル: ExplorerViewModel.cs プロジェクト: paulswartz/Mason
    protected void HandleResponseError(AsyncError err, ExecuteWebRequestEventArgs args)
    {
      Logger.Error("Error in response handling", err.Exception);

      Application.Current.Dispatcher.Invoke(new Action(() =>
        {
          IsExecutingRequest = false;

          if (err.Response.WebResponse != null)
            StatusLine = string.Format("{0} {1}", (int)err.Response.StatusCode, err.Response.StatusCode.ToString());
          else if (err.Exception != null)
            StatusLine = err.Exception.Message;
          else
            StatusLine = "Unknown error";

          PreviousStatusLine = null;

          if (args.OnFailure != null)
            args.OnFailure(err.Response);

          RenderResponse(err.Response);
          MessageBox.Show(GetOwnerWindow(), err.Exception.Message);
          
          if (err.Response != null)
            TryHandleAuthorization(err.Response);
        }));
    }
コード例 #5
0
ファイル: ExplorerViewModel.cs プロジェクト: paulswartz/Mason
    protected void HandleResponse(Response r, ExecuteWebRequestEventArgs args)
    {
      Application.Current.Dispatcher.Invoke(new Action(() =>
        {
          IsExecutingRequest = false;
          StatusLine = string.Format("{0} {1}", (int)r.StatusCode, r.StatusCode.ToString());
          PreviousStatusLine = null;

          if (args.OnSuccess != null)
            args.OnSuccess(r);

          if (ContentRender is IDisposable)
            ((IDisposable)ContentRender).Dispose();

          // In case of "201 Created" with Location header: GET new location (but keep same success/failure handlers)
          if (r.CreatedLocation != null)
          {
            Request req = r.CreatedLocation.Follow(r.Session).Method("GET");
            ExecuteWebRequestEventArgs args2 = new ExecuteWebRequestEventArgs(r.Session, req)
            {
              OnSuccess = args.OnSuccess,
              OnFailure = args.OnFailure
            };
            ExecuteWebRequest(args2);
            return;
          }

          RenderResponse(r);
        }));
    }
コード例 #6
0
ファイル: ExplorerViewModel.cs プロジェクト: paulswartz/Mason
    protected void ExecuteWebRequest(ExecuteWebRequestEventArgs args)
    {
      IsExecutingRequest = true;

      if (CurrentRequest != null)
      {
        CurrentRequest.CancelAsync();
        CurrentRequest = null;
      }

      try
      {
        if (SettingsReader.Get(() => Properties.Settings.Default.PreferMinimalResponseSize, false))
          args.Request.Header("Prefer", "return=minimal");

        if (SettingsReader.Get(() => Properties.Settings.Default.UseMethodOverride,false) && args.Session.RequestInterceptors.Find("MethodOverrideInterceptor") == null)
          args.Session.RequestInterceptors.Add("MethodOverrideInterceptor", new MethodOverrideInterceptor());

        args.Request
            .Accept("application/vnd.mason+json", 1)
            .Accept("*/*", 0.5)
            .Async()
            .OnError(r => HandleResponseError(r, args))
            .OnComplete(() => CurrentRequest = null)
            .Submit(r => HandleResponse(r, args));

        CurrentRequest = args.Request;
      }
      catch (Exception ex)
      {
        IsExecutingRequest = false;
        Logger.Error(ex);
        MessageBox.Show(GetOwnerWindow(), ex.Message, "Failed to setup request");
      }
    }