【问题标题】:WebRequest async asp.net-mvcWebRequest 异步 asp.net-mvc
【发布时间】:2020-03-02 19:33:06
【问题描述】:

我使用代码从 Atlassian Jira 获取数据并将响应中的数据放入容器中,如何使此方法异步? 我用 webrequest 尝试了各种方法,但它们都指向代码中的错误,也许我根本不明白它是如何工作的。您可以建议文档或在代码中指定我可以对此类请求使用异步做什么。

 public IEnumerable<JiraDataModel> GetData(string dateFrom, string dateTo)
        {
            int allTicketsCount = 0;
            int devTicketsCount = 0;
            int slaTicketsCount = 0;

            List<JiraRequestUrl> urlArray = new List<JiraRequestUrl>();
urlArray.AddRange(new List<JiraRequestUrl>

        {
            new JiraRequestUrl{type = "all", //*data*//},
            new JiraRequestUrl(){type = "dev",//*data*//});

            try
        {
            foreach (JiraRequestUrl u in urlArray)
            {
                WebRequest request = WebRequest.Create(_jiraUrl + u.url);
                request.ContentType = "application/json; charset=utf-8";
                request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(_credentials)));
                request.Headers.Add("maxResults", "100");

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                    JiraGetDataModel.RootObject DeserializedResponse = (JiraGetDataModel.RootObject)JsonConvert.DeserializeObject(responseString, typeof(JiraGetDataModel.RootObject));

                    if (u.type.Equals("all"))
                    {
                        allTicketsCount = DeserializedResponse.total;
                    }
                    if (u.type.Equals("dev"))
                    {
                        devTicketsCount = DeserializedResponse.total;
                    }
                }
            }

【问题讨论】:

  • 可以分享action方法的完整代码吗?还有什么是你得到的错误?也分享错误信息。
  • @Rahatur,嗨,添加了完整的代码。我没有用 async 保存任何错误,因为我尝试错误地使用方法,并将代码返回到其原始状态
  • 如果您没有说明您面临的问题以及在哪一行,那么社区成员将不会发现错误。该问题将被标记为质量差并关闭。由于您是新手,为了获得帮助,我建议您提供尽可能多的信息。请参阅此处的问题指南:stackoverflow.com/help/how-to-ask
  • 如果您不向我们展示您尝试了什么以及错误是什么,我们就没有多少机会帮助您。我们无法用不可见的代码解决不可见的问题。无论如何,您到底想做什么异步?我假设的 HTTP 请求?和/或别的什么?还不是很清楚。
  • P.S.假设您想异步使用 webrequest,您是否在网上查看过其他现有资料?例如以stackoverflow.com/a/49225438/5947043 为例。

标签: c# asp.net-mvc async-await


【解决方案1】:

抱歉,我不太明白我没有插入使用异步的尝试,我做到了,而且它似乎有效,我可以改进我的代码中的某些内容吗?加了两行

  public async Task<IEnumerable<JiraDataModel>> GetData(string dateFrom, string dateTo)
        {
            int allTicketsCount = 0;
            int devTicketsCount = 0;
            int slaTicketsCount = 0;

            List<JiraRequestUrl> urlArray = new List<JiraRequestUrl>();

            urlArray.AddRange(new List<JiraRequestUrl>
        {
            new JiraRequestUrl{type = "all", //*data*//},
            new JiraRequestUrl(){type = "dev",//*data*//});

            try
        {
            foreach (JiraRequestUrl u in urlArray)
            {
                WebRequest request = WebRequest.Create(_jiraUrl + u.url);
                request.ContentType = "application/json; charset=utf-8";
                request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(_credentials)));
                request.Headers.Add("maxResults", "100");

                HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync()request.GetResponse();

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                    JiraGetDataModel.RootObject DeserializedResponse = (JiraGetDataModel.RootObject)JsonConvert.DeserializeObject(responseString, typeof(JiraGetDataModel.RootObject));

                    if (u.type.Equals("all"))
                    {
                        allTicketsCount = DeserializedResponse.total;
                    }
                    if (u.type.Equals("dev"))
                    {
                        devTicketsCount = DeserializedResponse.total;
                    }
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多