/ / Devolver error de estado a WebRequest - c #, asp.net-mvc, httpwebrequest

Devuelva el error de estado a WebRequest - c #, asp.net-mvc, httpwebrequest

Llamo una acción remota con un WebRequest como eso:

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 */ }

En la acción remota, devuelvo un mensaje o null (Si id es bueno o no)

Pero response.StatusDescription siempre es igual a "OK" incluso si la acción vuelve null.

¿Cómo puedo forzar un error como estado o recuperar un mensaje (como "Cool." o "Error.")?


La muestra de acción remota:

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

Respuestas

3 para la respuesta № 1

Códigos Httpstatus como error o cool no son válidos, aquí Puede encontrar todos los códigos de estado.

En lugar de devolver una cadena por error, lo mejor que puede hacer es lanzar una HttpException:

throw new HttpException(500, "Error");

En este caso, uso el código de estado de respuesta http 500 (Error interno del servidor).

Otra consideración es mirar ASP.NET WebApi para este tipo de servicios, creo que se adapta mejor que un controlador Asp.NET MVC.


0 para la respuesta № 2

Simplemente tome la respuesta a un StreamReader como se indica a continuación.

      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();

El estado del resultado le dará el Estado de error y la Descripción