the servidor returned remoto remote prohibido net forbidden error c#

servidor - forbidden c#



El servidor remoto devolvió un error:(403) Prohibido (8)

He escrito una aplicación que ha funcionado bien durante meses, en los últimos días he recibido el siguiente error solo en la versión instalada.

Si ejecuto el código fuente en VS todo funciona bien. Además, el .exe en las carpetas bin funciona bien. Es solo la versión instalada la que genera el error, si recompilo y reinstalo obtengo el mismo error.

Estoy un poco perplejo en cuanto a lo que está causando esto y espero algunos consejos. Parece que la respuesta de WebRequest a través de IE no se está devolviendo, pero estoy sorprendido de por qué funciona bien en VS sin ningún error. ¿Existen nuevas medidas / políticas de seguridad de IE que puedan causar esto?

Las cosas que he probado hasta ahora incluyen:

  • Desactivado todos los antivirus y cortafuegos
  • Ejecutar como administrador

La excepción:

Exception: System.Windows.Markup.XamlParseException: The invocation of the constructor on type ''XApp.MainWindow'' that matches the specified binding constraints threw an exception. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden. at System.Net.HttpWebRequest.GetResponse() at XApp.HtmlRequest.getHtml(Uri uri) in J:/Path/MainWindow.xaml.cs:line 3759 at XApp.MainWindow.GetLinks() in J:/Path/MainWindow.xaml.cs:line 2454 at XApp.MainWindow..ctor() in J:/Path/MainWindow.xaml.cs:line 124 --- End of inner exception stack trace --- at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc) at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties) at System.Windows.Application.DoStartup() at System.Windows.Application.<.ctor>b__1(Object unused) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) Exception: System.Net.WebException: The remote server returned an error: (403) Forbidden. at System.Net.HttpWebRequest.GetResponse() at XApp.HtmlRequest.getHtml(Uri uri) in J:/Path/MainWindow.xaml.cs:line 3759 at XApp.MainWindow.GetLinks() in J:/Path/MainWindow.xaml.cs:line 2454 at XApp.MainWindow..ctor() in J:/Path/MainWindow.xaml.cs:line 124

EDITAR:

Esto se instala como una aplicación independiente. Cuando ejecuté como Administrador, abrí la carpeta del programa y ejecuté el exe como administrador en lugar del acceso directo.

El código que causa el problema es este.

private void GetLinks() { //Navigate to front page to Set cookies HtmlRequest htmlReq = new HtmlRequest(); OLinks = new Dictionary<string, List<string>>(); string Url = "http://www.somesite.com/somepage"; CookieContainer cookieJar = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.CookieContainer = cookieJar; request.Accept = @"text/html, application/xhtml+xml, */*"; request.Referer = @"http://www.somesite.com/"; request.Headers.Add("Accept-Language", "en-GB"); request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"; request.Host = @"www.somesite.com"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); String htmlString; using (var reader = new StreamReader(response.GetResponseStream())) { htmlString = reader.ReadToEnd(); } //More Code }


Añade la siguiente línea:

request.UseDefaultCredentials = true;

Esto permitirá que la aplicación utilice las credenciales del usuario que ha iniciado sesión para acceder al sitio. Si está devolviendo 403, claramente está esperando autenticación.

También es posible que (¿ahora?) Tenga un proxy de autenticación entre usted y el sitio remoto. En cuyo caso, intente:

request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

Espero que esto ayude.


Ajuste:

request.Referer = @"http://www.somesite.com/";

y agregando cookies que funcionaron para mi


Debemos acceder al sitio web utilizando el nombre dado en el certificado.


En mi caso recordé que hace un tiempo se creó un agujero en el firewall para esta dirección, así que tuve que establecer useDefaultWebProxy = "false" en el enlace en el archivo de configuración, como si el valor predeterminado fuera usar el proxy si useDefaultWebProxy no especificado.


Es probable que esto no ayude a demasiadas personas, pero este fue mi caso: estaba usando la API de Jira Rest y estaba usando mis credenciales personales (las que utilizo para iniciar sesión en Jira). Había actualizado mi contraseña de Jira pero olvidé actualizarlos en mi código. Recibí el error 403, intenté actualizar mi contraseña en el código pero aún así obtuve el error.

La solución: intenté iniciar sesión en Jira (desde su página de inicio de sesión) y tuve que ingresar el texto para demostrar que no era un robot. Después de eso volví a intentarlo desde el código y funcionó. Para llevar: El servidor puede haberte bloqueado.


Es un error de permisos. Es probable que su VS se ejecute utilizando una cuenta elevada o una cuenta de usuario diferente a la del usuario que utiliza la versión instalada.

Puede ser útil verificar sus permisos de IIS y ver qué cuentas tienen acceso al recurso al que está accediendo. Haga una referencia cruzada con la cuenta que usa y la cuenta que usan las versiones instaladas.


Parece que el problema se basa en un lado del servidor.

En mi caso, trabajé con el servidor de PayPal y ninguna de las respuestas sugeridas ayudó, pero http://forums.iis.net/t/1217360.aspx?HTTP+403+Forbidden+error

Me enfrentaba a este problema y acabo de recibir la respuesta del técnico de PayPal. Añadir esto solucionará el problema 403. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.UserAgent = "[any words that is more than 5 characters]";


private class GoogleShortenedURLResponse { public string id { get; set; } public string kind { get; set; } public string longUrl { get; set; } } private class GoogleShortenedURLRequest { public string longUrl { get; set; } } public ActionResult Index1() { return View(); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult ShortenURL(string longurl) { string googReturnedJson = string.Empty; JavaScriptSerializer javascriptSerializer = new JavaScriptSerializer(); GoogleShortenedURLRequest googSentJson = new GoogleShortenedURLRequest(); googSentJson.longUrl = longurl; string jsonData = javascriptSerializer.Serialize(googSentJson); byte[] bytebuffer = Encoding.UTF8.GetBytes(jsonData); WebRequest webreq = WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url"); webreq.Method = WebRequestMethods.Http.Post; webreq.ContentLength = bytebuffer.Length; webreq.ContentType = "application/json"; using (Stream stream = webreq.GetRequestStream()) { stream.Write(bytebuffer, 0, bytebuffer.Length); stream.Close(); } using (HttpWebResponse webresp = (HttpWebResponse)webreq.GetResponse()) { using (Stream dataStream = webresp.GetResponseStream()) { using (StreamReader reader = new StreamReader(dataStream)) { googReturnedJson = reader.ReadToEnd(); } } } //GoogleShortenedURLResponse googUrl = javascriptSerializer.Deserialize<googleshortenedurlresponse>(googReturnedJson); //ViewBag.ShortenedUrl = googUrl.id; return View(); }