简体   繁体   中英

WebRequest async asp.net-mvc

I use code to get data from Atlassian Jira and put the data from the response into a container, how can I make this method asynchronous? I have tried various methods with webrequest, but they all point to an error in the code, perhaps I do not understand how it works at all. You can suggest documentation or specify in the code what I can do with asynchrony for such a request.

 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;
                    }
                }
            }

sorry, I didn't quite understand that I didn't insert my attempts to use async, I did it, and it seems to work, can I improve something in my code? added 2 lines

  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;
                    }
                }
            }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM