CANIAS WebApi Erişimi | Troia

Merhaba, CANIAS’tan WCF web servisi tetikleyebildiğimiz gibi WebApi’yi de tetikleyebiliyoruz.
Kullandığım yöntemi burada paylaşıyorum belki birilerinin daha işine yarayabilir diyerek.

CLSGENELISLEMLER adında bir CLASS’ımız olsun.
İçerisinde de WEBAPICAGIR adında bir metodumuz olsun.
İki parametre alsın, Biri API’de tetiklenecek operasyonun adı, diğeri de parametrelerin XML string hali.
Parametreleri ancak ENCODEURL yaparak gönderebildim.
Güvenlik için HEADER’a bir anahtar string ekledim.

PARAMETERS: 
 STRING OPERASYONADI,
 STRING PARAMXML;
LOCAL: 
 STRING APIADRES,
 STRING PARAMETRE,
 STRING ADRESPARAM;
APIADRES = 'http://webapi.abc.com/Api/SrvErp/ErpOperasyon?';
PARAMETRE = 'OperasyonAdi=' + OPERASYONADI + '&strParamXml=' + ENCODEURL(PARAMXML);
ADRESPARAM = (APIADRES + PARAMETRE);
SENDHTTPPOST ' ' TO ADRESPARAM CODEPAGE 'utf-8' CONTENTTYPE 'xml/json' REQUESTMETHOD 'POST' HEADERS 'Anahtar|,498ryfbvhtg576htbbtgtyh75';
RETURN SYS_HTTPPOSTRESPONSE;

Bunu kullanacağımız senaryo da bir kargo firmasına irsaliyeleri gönderme işlemi olsun.

LOCAL: 
 STRING OPERASYONADI,
 STRING PARAMXML,
 CLSGENELISLEMLER OBJGENELISLEM;
OPERASYONADI = 'SendCloudGonder';
PARAMXML = '<PARAM P1="01" P2="I1" P3="MST-00001" />';
STRINGVAR3 = OBJGENELISLEM.WEBAPICAGIR(OPERASYONADI, PARAMXML);

Peki bunu karşılayan WebAPI nasıl olacak?
O da şu şekilde:

[ErpApiAnahtarKontrol]
public class SrvErpController : ApiController
{
    [HttpPost]
    public string ErpOperasyon(string OperasyonAdi, string strParamXml)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(HttpUtility.UrlDecode(strParamXml)); // Diger taraftan ENCODE ile gondermistim burada DECODE ile okunabilir sekle ceviriyoruz.
        XmlNode paramNode = xmlDoc.SelectSingleNode("/PARAM");
        switch (OperasyonAdi)
        {
            case "SendCloudGonder":
                string firmaKodu = paramNode.Attributes["P1"].Value;
                string belgeTuru = paramNode.Attributes["P2"].Value;
                string musteriNo = paramNode.Attributes["P3"].Value;
                return new SrvErpIslemleri().SendCloudIrsaliyeGonder(firmaKodu, belgeTuru, musteriNo);
            default:
                return "Tanımsız operasyon!(" + OperasyonAdi + ")";
        }
    }

}

public class ErpApiAnahtarKontrol : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        IEnumerable<string> token = actionContext.Request.Headers.Where(s => s.Key == "Anahtar").FirstOrDefault().Value;
        if (token == null || !token.Any(r => r == SrvSabitler.ErpApiAnahtar))
        {
            var response = actionContext.Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, "Missing or wrong ApiKey.");
            actionContext.Response = response;
        }
    }
}

Selamlar.

Leave a Reply

Your email address will not be published.