Respuesta para comprobaciones tiene no válido código de estado HTTP 405

He leído muchos problemas similares en StackOverflow, pero las soluciones no funciona para mí.

He WCF RESTO de servicios:

[<OperationContract>]    
    [<WebInvoke(UriTemplate = "PostItem", 
            RequestFormat= WebMessageFormat.Json,   
            ResponseFormat = WebMessageFormat.Json, Method = "POST")>]         

La voy a usar el uso de Cartero (extensión de Chrome). Estoy pasando datos como ‘raw’, no ‘urlencoded’. Y tengo 200 código de retorno.

Respuesta para comprobaciones tiene no válido código de estado HTTP 405

Tengo que llamar a este método con angularjs:

    $http.post('http://192.168.1.65/Service1.svc/restapi/PostItem',                   
                {
    "Address": "г. Москва, ул. Соколово-Мещерская, д.25",
     ...
    "User": ""
      })  

Acabo de copiar la URL y JSON de Cartero. Pero me sale el error:

angular.js:10722 OPCIONES
http://192.168.1.65/Service1.svc/restapi/PostItem
http://192.168.1.65/Service1.svc/restapi/PostItem. Respuesta para
comprobaciones tiene no válido código de estado HTTP 405

He buscado problemas similares y han encontrado dos soluciones:

  1. El uso de jQuery para establecer el encabezado Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', pero no funciona con mi servicio WCF
  2. Establecer encabezados personalizados en mi Web.Config:
    <httpProtocol>
       <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Headers" value="Content-Type" />
          <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
       </customHeaders>
    </httpProtocol>

No me ayuda. Y no estoy seguro de que la razón del error en el lado del servidor. El Cartero de extensión puede llamar a este método con éxito.

¿Cómo puedo hacer el mismo POST de la llamada utilizando AngularJS ?

Actualización:

Aquí es las OPCIONES de solicitud:

Respuesta para comprobaciones tiene no válido código de estado HTTP 405

De revisión y Respuesta de las fichas están vacías

Actualización 2:

Todo funciona bien en IE, pero no funciona en Chrome.

por lo general .Net enviará la información de error junto con sus 405 código de estado… la sacaste?
he actualizado mi pregunta y añadir la pantalla de esta solicitud en Chrome.
no, a ver en la actualización de la imagen que has publicado, marque la casilla «vista previa» de la ficha
La vista previa y la Respuesta fichas están vacías
trate de configurar todos los parámetros de nuestro WCF función opcional. Déjame saber lo que hace

OriginalEl autor demas | 2015-11-04

6 Kommentare

  1. 24

    Incluso cerrado pregunta, quiero mostrar lo que funciona para mí.

    Primero debe habilitar CORS en la web.config (como Mihai triste):

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE,     OPTIONS" />
      </customHeaders>
    </httpProtocol>

    Si usted tiene algún extra parámetro de CABECERA, debe agregarlo a Access-Control-Allow-Encabezados, como:

    <add name="Access-Control-Allow-Headers" value="Content-Type, X-Your-Extra-Header-Key" />

    Y, finalmente, para el manejo de las OPCIONES de las solicitudes debe responder con una respuesta vacía, añadiendo que en la clase de aplicación:

    protected void Application_BeginRequest()
    {
        if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
        {
            Response.Flush();
        }
    }
    estoy recibiendo el mismo error en ASP net web api 4. qué hacer, por favor, sugiera
    Yo tengo a veces, cuando algún archivo dll se ha dañado. ¿Tiene usted una manera de probar si el servidor se returnig algo? Que sucede en cada llamada hecha o sólo en algunos casos?
    simple $.llamada ajax están trabajando bien, pero al hacer la solicitud de $http (angularjs módulo) dando este error.. he publicado una pregunta en este : stackoverflow.com/questions/37629422/…
    El enrojecimiento de la piel trabajado para mí (upvoted en consecuencia), pero no entiendo por qué. Mi Ajax de JQuery llama al trabajo ACEPTAR sin esto, cuando en un dispositivo móvil, sino que se ejecuta en VisualStudio puedo obtener 405 de la misma JQuery llamada. ¿Qué hace el rubor hacer exactamente y por qué lo necesito?

    OriginalEl autor Tiago Gouvêa

  2. 6

    Parece que he encontrado la solución. Acabo de añadir segundo método:

    [<OperationContract>]    
    [<WebInvoke(UriTemplate = "PostTest", 
            RequestFormat= WebMessageFormat.Json,   
            ResponseFormat = WebMessageFormat.Json, Method = "POST")>]         
    abstract PostTest: obj: Test -> unit
    
    [<OperationContract>]    
    [<WebInvoke(UriTemplate = "PostTest", 
            RequestFormat= WebMessageFormat.Json,   
            ResponseFormat = WebMessageFormat.Json, Method = "OPTIONS")>]         
    abstract PostTestOptions: unit -> unit

    Es sólo vacío métodos que no hacen nada. No sé la razón, pero todo está funcionando.

    Funcionó porque ya tiene customHeaders en su web.config que devuelve lo que COR esperar, pero usted no tiene un uriTemplate que permite OPCIONES. Así que, después de crear un emtpy método, las comprobaciones podría trabajar y consiguió el excpected encabezados de customHeaders.
    Esto funciona, pero creo que usted puede cambiar el método existente para Method = «OPCIONES» sin duplicar. Que aún después de los datos.
    Muchas gracias. Esto funcionó para mí, estaba rascándome la cabeza y para las edades. Ver mi post stackoverflow.com/questions/48449208/… he probado con sólo Method=OPCIONES y esto no

    OriginalEl autor demas

  3. 1

    Aunque este ya tiene una respuesta, pero aquí está mi solución.
    En la web de configuración, usted tiene que quitar la instrucción a <remove name="OPTIONSVerbHandler" />

    Agregar primero en el customHeaders

    <httpProtocol>
      <!-- THESE HEADERS ARE IMPORTANT TO WORK WITH CORS -->
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
        <add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With, X-Authentication, name" />
      </customHeaders>
    </httpProtocol>

    Luego de comentar o eliminar la instrucción para quitar el OPTIONSverbHandler

    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <!-- <remove name="OPTIONSVerbHandler" /> -->
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

    OriginalEl autor Morvael

  4. 0

    Desde el Equipo de IIS publicado IIS CORS módulo hacks como métodos vacíos no son ya necesarias. Se trata con CORS incluyendo comprobaciones correctamente las solicitudes. Se puede configurar en la configuración web por ejemplo:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <cors enabled="true" failUnlistedOrigins="true">
                <add origin="*" />
                <add origin="https://*.microsoft.com"
                     allowCredentials="true"
                     maxAge="120"> 
                    <allowHeaders allowAllRequestedHeaders="true">
                        <add header="header1" />
                        <add header="header2" />
                    </allowHeaders>
                    <allowMethods>
                         <add method="DELETE" />
                    </allowMethods>
                    <exposeHeaders>
                        <add header="header1" />
                        <add header="header2" />
                    </exposeHeaders>
                </add>
                <add origin="http://*" allowed="false" />
            </cors>
        </system.webServer>
    </configuration>

    OriginalEl autor Jesús López

  5. 0

    Acabo de resolver el mismo problema con la eliminación de xhr.setRequestHeader() en mi petición AJAX. Si alguien tiene uno en el código, intenta eliminarlo.

    OriginalEl autor muinh

  6. 0

    Solución que funcionó para mí:

    1. Agregue esto a la web.config (lado del servidor):

       <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Headers" value="Content-Type" />
          <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE,  OPTIONS" />
        </customHeaders>
      </httpProtocol>
    2. Crear una Global.archivo asax (aplicación Global de la clase) y agregue el código siguiente:

          protected void Application_BeginRequest(object sender, EventArgs e){
              if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
                  {
                      Response.Flush();
                  }
          }
    Es una solución de trabajo y no hay necesidad de downvote sólo porque no se ve muy bien.

    OriginalEl autor Tech Enthusiast

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea