检查WebAPI是否可用于C#Code Behind的简单,最佳方法

时间:2016-09-06 07:48:56

标签: c# asp.net if-statement asp.net-web-api

检查WebAPI是否可用的最佳方法是什么?我想用简单的if()语句检查它,是否可以保持它相对简单?如果有更好的方法来检查。像一个尝试/捕获。就告诉我嘛。感谢

我想在我的代码隐藏Page_Load方法中包含if语句。因此,当API不可用时,我可以阻止该网站。

我试过了:

try
  {
       WebClient client = new WebClient();
       client.UseDefaultCredentials = true;

       string response = client.DownloadString(baseuri + Constants.API_LEHRLING + lehrlingID);
   }
   catch (Exception ex)
   {
        string url = "AccessDenied.aspx";
        Server.Transfer(url, true);
   }

我正在尝试从我的webapi下载一个字符串。我的uri是自动构建的。如果发生异常,我会参考我的错误网站。

还有其他想法吗?这个方法有效,但不是很干净

2 个答案:

答案 0 :(得分:5)

这样的事情应该这样做(假设你的API有一个支持相当简单的GET请求的方法)。如果您没有收到HTTP 200(OK)回复,则可能存在问题,您应该采取措施使您的网站无法使用(例如隐藏所有内容)。

最好将它放在您的母版页中,如果您有一个:

try{
        URL url = new URL(getClass().getResource("Documentation.pdf"), null);
        Desktop.getDesktop().browse(url.toURI());
    }catch(Exception exception){
        Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,  exception.getLocalizedMessage(), exception);
        ErrorDialog.openError(null, "Error", "Error occured!", status);
    }

答案 1 :(得分:5)

假设这是你的流程:

  • 用户加载您的网页,检查API是否已启动。
  • 用户输入数据,提交表单。
  • 使用提交的数据,您可以调用您感兴趣的实际API调用。

在发出实际请求之前想要检查API是没有意义的。当然,简单的“GET”可能会成功,然后实际的请求可能会失败,并没有证明什么。 API可以在两个请求之间停止,或者“检查”请求执行与实际请求不同的操作,导致后者无论如何都会失败。

此外,鉴于大多数网络I / O都是非常漏洞的抽象,无论如何,你需要异常处理代码。因此,无论您使用private <T> void addStatisticalFiles (String fleetName, ArrayList<T> treeFolders, boolean isFleetInfo){ String fleetPath = env.getRequiredProperty(PROPERTY_NAME_FILESYSTEM_BASEPATH) + fleetName + File.separator + "statistics"; File statisticalFolder = new File(fleetPath); if (statisticalFolder != null && statisticalFolder.exists()){ if (!isFleetInfo){ treeFolders.add(fleetPath); for(String statisticalFile : statisticalFolder.list()){ treeFolders.add(fleetPath + File.separator + statisticalFile); } }else{ treeFolders.add(new FleetInfo("dir:" + fleetPath, null, null, null)); for(String statisticalFile : statisticalFolder.list()){ treeFolders.add(new FleetInfo("file:" + fleetPath + File.separator + statisticalFile, null, FleetType.file, null)); } } } } HttpWebRequest还是WebClient 都需要将代码包装在HttpClient块中。

请参阅How to see if HttpClient connects to offline website.Net HttpWebRequest.GetResponse() raises exception when http status code 400 (bad request) is returnedHow to check if Web server is up? (C#)等。

但是,似乎API会为您处理授权和身份验证,并且API有时会“失败”,导致您的代码将此检测为有效尝试使用您的网站,因此您似乎只需要修复实际执行API调用的代码。没有try-catch声明可以帮助你。