【问题标题】:How to use data from a variable inside a method in a different method (both methods in the same class)?如何在不同方法(同一类中的两个方法)中使用方法内部变量中的数据?
【发布时间】:2016-02-14 17:07:51
【问题描述】:

我想在第二种方法中重用第一种方法中的 OAuth2Parameters 参数。代码如下:

public class SomeController : ApiController
    {
        public string First()
        {
            OAuth2Parameters parameters = new OAuth2Parameters();

            parameters.ClientId = "someClientID";
            parameters.ClientSecret = "someClientSecret";
            parameters.RedirectUri = "someRedirectUri";
            parameters.Scope = "someScope";

            string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);

            return authorizationUrl;
        }

        public void Second(string someAccessCode)
        {
            // I want to reuse the above OAuth2Parameters parameters here:
            parameters.AccessCode = someAccessCode;

            OAuthUtil.GetAccessToken(parameters);
            string accessToken = parameters.AccessToken;
        }
    }

我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net object methods oauth-2.0


    【解决方案1】:

    如果第一个方法总是在第二个方法之前调用,您可以为该类声明一个成员字段。

    public class SomeController : ApiController
    {
        OAuth2Parameters parameters;
    
        public string First()
        {
            string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
    
            return authorizationUrl;
        }
    
        public void Second(string someAccessCode)
        {
            // I want to reuse the above OAuth2Parameters parameters here:
            parameters.AccessCode = someAccessCode;
    
            OAuthUtil.GetAccessToken(parameters);
            string accessToken = parameters.AccessToken;
        }
    }
    

    如果您不确定,请使用带有支持字段的属性。

    public class SomeController : ApiController
    {
        OAuth2Parameters _parameters;
    
        private OAuthParameters {
          get {
            if (_parameters == null) {
              _parameters = new OAuth2Parameters();
    
              _parameters .ClientId = "someClientID";
              _parameters .ClientSecret = "someClientSecret";
              _parameters .RedirectUri = "someRedirectUri";
              _parameters .Scope = "someScope";
            }
    
            return _parameters;
          }
        }
    
        public string First()
        {
            string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(OAuthParameters);
    
            return authorizationUrl;
        }
    
        public void Second(string someAccessCode)
        {
            // I want to reuse the above OAuth2Parameters parameters here:
            parameters.AccessCode = someAccessCode;
    
            OAuthUtil.GetAccessToken(OAuthParameters);
            string accessToken = OAuthParameters.AccessToken;
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个..在 First() 上方声明变量,以便它可用于两种方法

      OAuth2Parameters parameters; 
      public string First() {  parameters = new OAuth2Parameters(); ....
      

      【讨论】:

      • @Marko:您的第一个建议会引发错误,并且您的私有 OAuthParameters 有问题。相反,我把 OAuth2Parameters 参数 = new OAuth2Parameters();直接在我的课下,但现在这一行: OAuthUtil.GetAccessToken(OAuthParameters);向我抛出此错误:System.dll 中发生了“System.Net.WebException”类型的异常,但未在用户代码中处理。附加信息:远程服务器返回错误:(400) Bad Request。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多