0

URLのリストをチェックし、httpstatusコード、説明、メッセージをビューに返すコントローラーがあります。ソリューションをデバッグするたびに、URLのリストを調べますが、最初のURLのステータスのみが返されます。

すべてのURLリストのステータスを返すにはどうすればよいですか?これが私のサンプルコードです

        {

        string[] urls = {
      "http://www.google.com","http://www.34q34adf.com","http://aldlfaldkfk.com","http://www.bbc.com"

                        };

        foreach (string url in urls)

        {
            try
            {


                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);


                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

                ViewBag.status_code = ((int)myHttpWebResponse.StatusCode);
                ViewBag.status_desc = myHttpWebResponse.StatusDescription;
                var current_code = ((int)myHttpWebResponse.StatusCode);

                if (current_code == 200)
                {
                    ViewBag.Image = "Images/green_light.png";
                    ViewBag.AlertType = "alert-success";
                }

                myHttpWebResponse.Close();

            }
            catch (WebException e)
            {
                string message = e.Message;

                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    HttpWebResponse hwr = (HttpWebResponse)e.Response;

                    ViewBag.status_code = ((int)hwr.StatusCode);
                    ViewBag.status_desc = hwr.StatusDescription;
                    var current_code = ((int)hwr.StatusCode);
                    ViewBag.status_desc = hwr.StatusDescription;
                    if (current_code != 200)
                    {
                        ViewBag.Image = "Images/red_light.png";
                        ViewBag.AlertType = "alert-error";
                    }
                }
            }
            catch (Exception e)
            {
                ViewBag.message = e.Message;
            }
        }

        return View();
    }

ビューにすべてのURLのステータスを表示させるにはどうすればよいですか?どんな助けでも本当にありがたいです。

4

1 に答える 1

1

URLとそのステータスを保持するViewModelを作成し、そのリストをビューに渡す必要があります。

public class URLStatusVM
{
  public string URL { set;get;}
  public string Status { set;get;}
}

そしてあなたのアクションメソッドで

public ActionResult CheckIt()
{
   List<URLStatusVM> urlList=new List<URLStatusVM>();

   string[] urls = {"http://www.google.com","http://www.aaa.com"}
   foreach (string url in urls)
   {
     //Check the status using HttpWebRequest call here

     //Create an object of our view model and set the property values
     var item=new URLStatusVM();
     item.URL=url;
     item.Status="Some status text"; //replace with the status from web call

     //now add to our list
     urlList.Add(item);

    //your foreach loop ends here
   }
   return View(urlList);
}

次に、ビューをURLStatusVMクラスのコレクションに強く型付けします。

@model List<URLStatusVM>

@foreach(var item in Model)
{
 <p> @item.URL </p>
 <p> @item.Status </p>
}
于 2013-03-03T03:51:28.770 に答える