Skip to main content

HttpWebRequest For Scribe Online Api

Scribe has made it extremely easy to work with their API.  Currently, in my limited free time, I am working on a reusable C# library to send and receive data from Scribe's API.  Once it is completed for Version 1, I will list it to GitHub, so anyone can consume it and provide feedback on improvements.  There will be a fully built out wiki with how to consume the library with references to the Scribe API documentation.  Also there will be both TDD (Test Driven Development) and BDD (Behavior Driven Development) projects.  This way you can see examples of how to consume the library as well as what I tested before release.  If you are not familiar with BDD, I recommend you check out my blog post in my Dynamics 365 blog, that gives a high level overview of it.

Anyways, back to what this post is about.  While working on the library, I came across one small issue around TLS 1.2 and making sure that the web request uses it.  Luckily, this is really easy to set in C#, when using .NET 4.5.  By default .NET 4.5 does not send TLS 1.2.  It is supported, just not the default.  So if TLS 1.2 is set for an endpoint, then we need to specify to use it.  This way we decrease the chance of an error occurring.  Here is a blog post I came across that helped me with my issue.

Because I am using C# .NET 4.5 I simply needed to add the following line of code:
 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12  

The line of code is added right before my HttpWebRequest.  Here is the fully working request method:


     public string SendRequest(string username, string password, string url, string method)  
     {  
       WebResponseFactory factory = new WebResponseFactory();  
       ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;  
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  
       request.Method = method;  
       request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}")));  
       request.ContentType = ParameterContentTypeSettings.applicationjson;  
       request.ContentLength = 0;  
       HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
       return factory.ProcessResponse(response);  
     }  

In this code I do use a factory to determine what kind of response I need to return.  It could be just a string response or a JSON string response response.  I have tested this against both Sandbox and Production API's with Scribe Online and it does work.  The only other thing I want to note in the above code, is I am sending a content length of 0.  This is because I did receive some error messages where content length was required, even though I wasn't sending a body.  If you need to send a JSON content body, there is the method where I do that:

        public string SendRequest(string username, string password, string url, string method, string contentBody)  
     {  
       ASCIIEncoding encoding = new ASCIIEncoding();  
       byte[] encodedData = encoding.GetBytes(contentBody);  
       WebResponseFactory factory = new WebResponseFactory();  
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  
       request.Method = method;  
       request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}")));  
       request.ContentType = ParameterContentTypeSettings.applicationjson;  
       request.ContentLength = encodedData.Length;  
       var requestStream = request.GetRequestStream();  
       requestStream.Write(encodedData, 0, encodedData.Length);  
       requestStream.Close();  
       HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
       return factory.ProcessResponse(response);  
     }  

If you need any help on working with the Scribe Api, please feel free to leave a comment below or leave a post in the Scribe Forums.  Also check out Scribe's Developer Portal for additional information.

References:
Tarnovskiy, S. (2016, April 28). TLS 1.2 and .NET Support: How to Avoid Connection Errors. Retrieved April 30, 2018, from https://blogs.perficient.com/microsoft/2016/04/tsl-1-2-and-net-support/

Comments

  1. I have been reading for the past two days about your blogs and topics, still on fetching! Wondering about your words on each line was massively effective.keep it up
    Ai & Artificial Intelligence Course in Chennai
    PHP Training in Chennai
    Ethical Hacking Course in Chennai Blue Prism Training in Chennai
    UiPath Training in Chennai

    ReplyDelete
  2. This is really nice. I love it. Great work done.

    ReplyDelete
  3. Looking for ways to set up your new router on your local network visit us at 192.168.1.1 we might be able to help you with that.
    Looking for ways to set up your new router on your local network visit us at 192.168.0.1 we might be able to help you with that.
    ESPN is the first company that works as a medium for bringing live sports online so that one can watch their favorite sports anytime or anywhere. To know more about the ESPN subscription plans or any other info visit espn.com/activate

    ReplyDelete
  4. coinbase pro login Despite the presence of a wide range of digital wallets and crypto-exchange platforms, users find Coinbase an easy-to-use platform. It uses advanced technology for cryptocurrency storage and came up with multi-angled trading services for corporate and personal account holders.

    ReplyDelete
  5. AOL MAIL LOGIN is all about convenience and efficiency. As such, creating and accessing your Email Account is extremely simple and quick. For this, you must go to its official website i.e. “mail.aol.com”. In order to create/ access your account smoothly without any hassle, you must follow the instructions given below.
    For More Information Visit Our Site:
    TURBOTAX LOGIN
    TUBI.TV/ACTIVATE
    amazon.com/code

    ReplyDelete
  6. Obviously a satisfying estimation. i've affirmation this bewildering announce. much obliged to you for sharing proposal generally it. I in truth further to that. much appreciated accurately part to your meet. Wifi Hack Online

    ReplyDelete
  7. I waterfrontt any expression to understand this call.....truely i'm dazzled from this make recognized....the person that make this screen it changed into an excellent human..thanks for shared this long past us. Norton Internet Security Full Crack

    ReplyDelete
  8. And should you get pleasure from both playing in} cards in a stay poker site and playing in} classic on line casino games, then Ignition might be the most effective on-line on line casino for you. No bonus code is important for this 150% deposit match as much as} $3,000 for poker and on line casino games. Most on-line playing sites will completely allow you to play free on line casino games first. This is to check out the on line casino to see should you like finest way|the way in which} the games play, or just, to see should you like the look of it. This additionally be|may additionally be|can be} a great way|a good way|an efficient way} bet365 to apply and work out the rules of a recreation.

    ReplyDelete
  9. This comment has been removed by the author.

    ReplyDelete

Post a Comment

Popular posts from this blog

Validating User Input In CRM Portals With JavaScript

When we are setting up CRM Portals to allow customers to update their information, open cases, fill out an applications, etc. We want to make sure that we are validating their input before it is committed to CRM.  This way we ensure that our data is clean and meaningful to us and the customer. CRM Portals already has a lot validation checks built into it. But, on occasion we need to add our own.  To do this we will use JavaScript to run the validation and also to output a message to the user to tell them there is an issue they need to fix. Before we can do any JavaScript, we need to check and see if we are using JavaScript on an Entity Form or Web Page.  This is because the JavaScript, while similar, will be different.  First, we will go over the JavaScript for Entity Forms.  Then, we will go over the JavaScript for Web Pages.  Finally, we will look at the notification JavaScript. Entity Form: if (window.jQuery) { (function ($) { if (typeof (entityFormClientVali

Dynamics Set IFrame URL - D365 v8 vs. D365 v9

While doing client work, I came across a problem with setting an IFrame URL dynamically.  The underlying issue was that the sandbox instance is on v8 of Dynamics 365 and production is on v9 of Dynamics 365.  The reason for this was because this client was setup around the time that Microsoft rolled out v9.  Anyways, JavaScript that I wrote to dynamically set the URL of the IFrame wasn't working in the v9 instance.  This was because of changes that Microsoft made to how IFrames are loaded on the form and also changes to JavaScript. Here is my v8 setup: JavaScript runs OnLoad of contact form.  This works because of how IFrames are loaded in v8.  You can also run it on either a tab change (hide / show) or OnReadyStateComplete event of the IFrame.  Depending on your setup you will need to choose which is best for you.  For me in this case it was the OnLoad event. Here is the JavaScript: function OnLoad() { //Get memberid var value = Xrm.Page.data.entity.attri

Navigating Microsoft Dynamics 365 Customization: Plugins vs. Azure Functions

Embarking on the Microsoft Dynamics 365 customization journey offers numerous opportunities to enhance your business processes. However, deciding between the available options, such as Plugins and Azure Functions, can be challenging. This engaging post will serve as your trusty guide, helping you choose the best option for your Dynamics 365 customization needs! The Two Customization Pathfinders: Plugin and Azure Function The Agile Plugin 🏃‍♂️ Reference: Microsoft Docs - Write a plug-in Plugins are like the swift trail runners of the Dynamics 365 customization world. They're the go-to choice for quick, real-time (synchronous), or background (asynchronous) operations that occur within the platform. They can intercept events and modify data before it's saved or displayed to the user. Choose Plugins when: You need real-time processing (synchronous) or background processing (asynchronous). You want to ensure data integrity. You need tight integration with Dynamics 365. Plugins mig