Estoy teniendo problemas con un poco de código que accede a un servicio web restful.
Ejecutando este código, errores en var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); y la excepción devuelto es: «el Sistema.Net.WebException : El servidor remoto devolvió un error: (415) no admitido TIPO de MEDIOS.»

    public bool CreateAccount(string myUsername, string url, string authtoken) {
        try {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.MediaType="application/json";
            httpWebRequest.Accept="application/json";
            httpWebRequest.Method = "POST";

            WebHeaderCollection headers = new WebHeaderCollection();
            headers.Add("Authorization: Token"+authtoken);
            httpWebRequest.Headers = headers;

            using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
                streamWriter.Write("{username : '"+myUsername+"'}");
            }

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); //Fails on this line.
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
                JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
                string json = streamReader.ReadToEnd();
            }
            return true;

        } catch (WebException e) {
            throw e;
            return false;
        }
        //return true;
    }

He intentado varias cosas para el ContentType, MediaType, y de Aceptar, pero el ejemplo de trabajo que me ha dado por el desarrollador del servicio de suministros -H «Content-Type: application/json» a curl, por lo que parece que «application/json» es el valor correcto. Él también lo hace-datos binarios, que supongo streamWriter hace por mí.

¿Alguien sabe qué puede estar causando este error?

InformationsquelleAutor petFoo | 2013-05-31

2 Comentarios

  1. 2

    Imaginé.

    Cuando hago:

            WebHeaderCollection headers = new WebHeaderCollection();
            headers.Add("Authorization: Token "+authtoken);
            httpWebRequest.Headers = headers;

    Accidentalmente golpe de distancia de todos los existentes encabezados que fueron creados por hacer:

            httpWebRequest.ContentType = "application/json";
            httpWebRequest.MediaType="application/json";
            httpWebRequest.Accept="application/json";
            httpWebRequest.Method = "POST";

    La respuesta es mover el código donde puedo crear el encabezado con el auth token anterior, el código donde lo puse el otro encabezados.

  2. 0

    Uno sabe la razón de este error es la falta de coincidencia de nombre de servicio de servicio de archivo y el archivo de configuración. Que es Su nombre de servicio y configuración del servicio de nombres no coinciden»

    Haga clic en .svc archivo en el Explorador de soluciones y seleccione «Vista de Marcado» y pegar correcta sevice nombre en el .config.

    • También antes del paso anterior, es importante ver si se puede examinar directamente el servicio.
    • No tengo servicio de archivo. Yo no creo que sea necesario si se golpea un servicio RESTful.
    • La herramienta que se utilice para mirar services? Yo sugiero utilizar HTTP4E cliente o RESTClient.
    • De nuevo es importante para ver si puede acceder a este servicio fuera de C#.
    • Como ya he dicho, el desarrollador me proporcionó un trabajo de curl de llamada que se puede acceder correctamente el servicio. No es el servicio, es mi código.
    • Lo que si se utiliza el siguiente código: HttpWebRequest solicitud = (HttpWebRequest)WebRequest.Crear(URL); WebResponse webResponse = solicitud.GetResponse();
    • OK he sustituido var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); con WebResponse httpResponse = httpWebRequest.GetResponse(); y ahora los errores en la reemplazados línea, y da el mismo error.

Dejar respuesta

Please enter your comment!
Please enter your name here