将状态错误返回给WebRequest

时间:2012-08-30 09:49:16

标签: c# asp.net-mvc httpwebrequest

我使用WebRequest调用远程操作:

var site = "http://remoteSite.com/controller/IsolateSite?url=xxx&target=in";
var request = (HttpWebRequest)WebRequest.Create(site);
var response = (HttpWebResponse)request.GetResponse();

if (response.StatusDescription == "OK")
{ /* code */ }
else
{ /* code */ }

在远程操作中,我会返回一条消息或null(如果id好或不好)。

但即使操作返回response.StatusDescription"OK"始终等于null

如何将错误强制为状态或检索邮件(例如"Cool.""Error.")?


远程操作示例:

public static string IsolateSite(string url, string target)
{
    var serverManager = new ServerManager();
    var isHttps = url.Contains("https");
    var regex = new Regex("^(http|https)://");
    var host = regex.Replace(url, "");
    var instance = serverManager.Sites.First(site => site.Bindings.Any(binding => binding.Host == host));
    var pool = instance.Applications[0].ApplicationPoolName;

    if ((pool.Contains("isolation") && target == "out") || (!pool.Contains("isolation") && target == "in"))
    {
        return "Error."; //or return null but the status code is OK so useless
    }

    //etc...

    return "Cool.";
}

2 个答案:

答案 0 :(得分:3)

errorcool等Httpstatus代码无效,here您可以找到所有状态代码。

而不是在出错时返回一个字符串,你可以做的最好就是抛出一个HttpException:

throw new HttpException(500, "Error");

在这种情况下,我使用http响应状态代码500(内部服务器错误)。

另一个考虑因素是看看这种服务的ASP.NET WebApi,我认为它比Asp.NET MVC控制器更合适。

答案 1 :(得分:0)

只需将响应发送到StreamReader,如下所示。

      var site = "http://remoteSite.com/controller/action/id";
      var request = (HttpWebRequest)WebRequest.Create(site);
      var response = (HttpWebResponse)request.GetResponse();
      StreamReader reader = new StreamReader(response.GetResponseStream());
       // This will contain the status of message e.g.    failed, ok etc.
      string resultStatus = reader.ReadToEnd(); 

结果状态将为您提供错误状态和说明