Permitir el método DELETE sobre la API WEB 2 del firewall

1

Estoy trabajando con un servicio de ASP.Net Web API 2 y el firewall niega el método DELETE (solo se permiten POST y GET).

¿Hay alguna forma de evitar esto e invocar mi método DELETE en la API?

    
pregunta Gerome Lucus 20.01.2017 - 00:58
fuente

2 respuestas

2

Si está bloqueado antes de que llegue a la aplicación, entonces no. Si la aplicación no puede verla, la aplicación no puede hacer nada para permitirla.

Lo que puedes hacer es hackearlo. La forma más común de implementar verbos que están bloqueados, o comúnmente están bloqueados como DELETE y PUT es agregar el encabezado X-Http-Method-Override a sus solicitudes, y establecer el valor para el verbo que realmente desea usar, pero use POST como el verbo HTTP para la solicitud. Luego, puede crear un DelegatingHandler que busque ese encabezado después de que la solicitud haya ingresado en la canalización de WebApi, y si existe, puede cambiar el HttpMethod real de la solicitud de POST a SUPRIMIR en ese momento.

    
respondido por el Xander 20.01.2017 - 01:51
fuente
1

Si me aclaro la pregunta, puede lograr lo que está buscando usando el método de anulación. Todo lo que necesita hacer es agregar la siguiente entrada en el encabezado de la solicitud

X-HTTP-Method-Override : DELETE

Luego haga una solicitud POST a su recurso.

En el extremo del servidor de API WEB, debe manejar este método que reemplaza usando DelegatingHandler. Luego, debe analizar cuál es el valor en el atributo X-HTTP-Method-Override y realizar su operación real en consecuencia.

A continuación se muestra un código de ejemplo

public class MethodOverrideHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
    CancellationToken cancellationToken)
    {
        if (request.Method == HttpMethod.Post && request.Headers.Contains("X-HTTP-Method-Override"))
        {
            var method = request.Headers.GetValues("X-HTTP-Method-Override").FirstOrDefault();
            bool isDelete = String.Equals(method, "DELETE", StringComparison.OrdinalIgnoreCase);
            if (isDelete)
            {
                request.Method = new HttpMethod(method);
            }
        }
        return await base.SendAsync(request, cancellationToken);
    }
}
    
respondido por el user3496510 20.01.2017 - 01:59
fuente

Lea otras preguntas en las etiquetas