Como gerir o controlo sobre os requests na WebAPI?
A WebAPI é uma peça tecnológica bastante extensível, que permite a utilização das extensões da API existente do ERP para facultar a criação de métodos REST que reaproveitam os mecanismos de segurança existentes. Este mecanismo é mais uma peça de extensão que permite aos programadores bloquear o envio do request. Poderá ser útil quando se pretende adicionar mecanismos de segurança sobre a forma como os pedidos são efetuados/bloqueados. Pré-requisitos Passo 1 - Criar o projeto Primeiro, é necessário criar um projeto com o Visual Studio de forma a criar uma classe que acrescente mais funcionalidades. Este projeto deve ser do tipo Class Library (.NET Framework). Passo 2 - Referências As seguintes referências devem ser adicionadas ao projeto: Passo 3 - Codificação No projeto recém-criado, deve ser adicionada uma nova classe, por exemplo: Passo 4 - Compilação e deployment Depois de executar os passos anteriores com sucesso, deve compilar o projeto. No output do projeto será gerada a assembly que terá de ser copiada para a pasta da Web API, que geralmente é a pasta: "PRIMAVERA/SG100/Apl/WebApi/bin/Extensions". Este é mais um mecanismo de extensão a esta peça que, por si só, já era altamente extensível e que proporciona um maior controlo sobre os requests realizados à WebAPI.Procedimento
namespace Primavera.WebAPI.MessageHandler
{
/// <summary>
/// Extension point to interact with WebAPI
/// </summary>
public class CustomMessageHandler : ICustomMessageHandler
{
/// <summary>
/// Allow or deny the request
/// In case of denial the user will receive a Forbidden message: 403.
/// </summary>
/// <param name="request">The request message.</param>
/// <returns>True when the call will continue, else the user will receive a Forbidden.</returns>
public override bool CanDispatchesRequest(Uri requestUri)
{
// this.PSO => Platform instance
// this.BSO => API Instance
// Neste exemplo todos os pedidos efetuados ao Uri que contenha /Base/Artigos são bloqueados
if(requestUri.AbsolutePath.Contains("/Base/Artigos"))
{
return false;
}
return true;
}
}
}
Conclusão
login para deixar a sua opinião.