tag:blogger.com,1999:blog-39105813442927657872024-02-02T11:56:54.069-08:00.NET ForceShahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.comBlogger66125tag:blogger.com,1999:blog-3910581344292765787.post-699637238155809682023-04-09T04:03:00.000-07:002023-04-09T04:03:01.108-07:00Calling ChatGPT using .NET Core<p> <span style="font-family: arial;">Hi Guys,</span></p><p><span style="font-family: arial;">With the immense hype created by ChatGPT every technology is adopting ways to integrate ChatGPT to their frameworks. Hence, a brilliant team led by <a href="https://github.com/hassanhabib">Hassan Habib</a> has managed to give .NET Developers a way to call ChatGPT programmatically and get the responses.</span></p><p><span style="font-family: arial;">Remember this is still a new project you might encounter some issues, but the Standard.AI.OpenAI team is ready to help us developers in this journey.</span></p><p><span style="font-family: arial;">The source code can be found <a href="https://github.com/hassanhabib/Standard.AI.OpenAI">here.</a></span></p><p><span style="font-family: arial;">1) First you must register yourself at https://platform.openai.com</span></p><p><span style="font-family: arial;">2) Then you must generate an API Key as shown below.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiUyt6_hrafzGdBu6_YChSqLOI7I4cicc1BYcL5hhjV1IWzjVmtMUrvu_bBXJkpjmaGaL1pDKYFjEi9O8LMLoCswLOVBEvRoxrE0F6UFR5P0eaK6xd4LsX887g2mEYG6X64VvRvel1jz8diEbKrudY755m4Buld-b47ZHBj_bq2s-TxyBms6XRRbd_/s1917/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="736" data-original-width="1917" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiUyt6_hrafzGdBu6_YChSqLOI7I4cicc1BYcL5hhjV1IWzjVmtMUrvu_bBXJkpjmaGaL1pDKYFjEi9O8LMLoCswLOVBEvRoxrE0F6UFR5P0eaK6xd4LsX887g2mEYG6X64VvRvel1jz8diEbKrudY755m4Buld-b47ZHBj_bq2s-TxyBms6XRRbd_/s320/1.PNG" width="320" /></span></a></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjHB9LIP2T9W7RatRtqsOGMpaVoU51Skx7ktvvHJn-dhiWR1EaiLZ1rQbooxSt0ZOTZLe4i7qZpHfR5sNAhFC_uVUhU8WFdYwTl_lydulMAEXog9trbj8snKgUElK481TAlybjs9waUS_Z0oLTkRIEGVZZGBt-ea_QE_bNFEJdy36Tuc0uKTwrDVnn/s1917/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="652" data-original-width="1917" height="109" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjHB9LIP2T9W7RatRtqsOGMpaVoU51Skx7ktvvHJn-dhiWR1EaiLZ1rQbooxSt0ZOTZLe4i7qZpHfR5sNAhFC_uVUhU8WFdYwTl_lydulMAEXog9trbj8snKgUElK481TAlybjs9waUS_Z0oLTkRIEGVZZGBt-ea_QE_bNFEJdy36Tuc0uKTwrDVnn/s320/2.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">3) Now you can start integrating your .NET Core applications to use openai. For this purpose I use a console application (.NET 7). </span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">4) Install the Nuget package Standard.AI.OpenAI</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">5) Copy paste the below code</span></div><div><span style="font-family: arial;"><br /></span></div><div><div><span style="font-family: arial;">using Microsoft.AspNetCore.Mvc;</span></div><div><span style="font-family: arial;">using Standard.AI.OpenAI.Brokers.DateTimes;</span></div><div><span style="font-family: arial;">using Standard.AI.OpenAI.Clients.OpenAIs;</span></div><div><span style="font-family: arial;">using Standard.AI.OpenAI.Models.Configurations;</span></div><div><span style="font-family: arial;">using Standard.AI.OpenAI.Models.Services.Foundations.ChatCompletions;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">OpenAIConfigurations openAIConfigurations = new OpenAIConfigurations() { </span></div><div><span style="font-family: arial;"> ApiKey = "<YOURAPIKEY>",</span></div><div><span style="font-family: arial;"> OrganizationId = "<YOURORGID>",</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">};</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">OpenAIClient openAIClient = new OpenAIClient(openAIConfigurations);</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">ChatCompletion chatCompletion = new ChatCompletion() { </span></div><div><span style="font-family: arial;">Request = new ChatCompletionRequest() {</span></div><div><span style="font-family: arial;"> Model = "gpt-3.5-turbo",</span></div><div><span style="font-family: arial;"> Messages = new ChatCompletionMessage[]</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> new ChatCompletionMessage</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> Content = "What is Java?",</span></div><div><span style="font-family: arial;"> Role = "user",</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">}</span></div><div><span style="font-family: arial;">};</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">ChatCompletion resultChatCompletion = await openAIClient.ChatCompletions.SendChatCompletionAsync(chatCompletion);</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Array.ForEach(</span></div><div><span style="font-family: arial;"> resultChatCompletion.Response.Choices,</span></div><div><span style="font-family: arial;"> choice => Console.WriteLine(</span></div><div><span style="font-family: arial;"> value: $"{choice.Message.Role}: {choice.Message.Content}"));</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Console.Read();</span></div></div><div><span style="font-family: arial;"><br /></span></div><span style="font-family: arial;">6) Final Result</span><div><span style="font-family: arial;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf2MiHij-x7WTlCnyXfLZ-OxBLPlGxQ38FtH0yZ3Sf9M43lhXOg3QNfNe6clggNscTePaLr3AnNUGNFM-gONvWqQ4DuRj2lPbrVSbiDhDwHA5teyXNd6FiDICs3hBWbKWAD3kTtxVAOf3UF7ugmnUKv4_-jw1ZVcw8vq8oAliEJQn-dgSdN0ID6GI6/s981/3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="513" data-original-width="981" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf2MiHij-x7WTlCnyXfLZ-OxBLPlGxQ38FtH0yZ3Sf9M43lhXOg3QNfNe6clggNscTePaLr3AnNUGNFM-gONvWqQ4DuRj2lPbrVSbiDhDwHA5teyXNd6FiDICs3hBWbKWAD3kTtxVAOf3UF7ugmnUKv4_-jw1ZVcw8vq8oAliEJQn-dgSdN0ID6GI6/s320/3.png" width="320" /></span></a></div><span style="font-family: arial;"><br /></span><div><span style="font-family: arial;"><br /><br /></span><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><br /></p></div>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-8811609266699077682023-03-18T23:23:00.005-07:002023-03-18T23:23:47.511-07:00Security tips for hosting .NET Web Application on IIS<p> <span style="font-family: arial;">Hi guys,</span></p><p><span style="font-family: arial;">After having made multiple small/medium level web application and hosted them in IIS. I have learned certain actions we can take while hosting to make a web application secure. They are as below.</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">1) Prevent Clickjacking</span></p><p><span style="font-family: arial;">In order to prevent clickjacking add the below to configuration > system.webServer > httpProtocol > customHeaders in web.config.</span></p><p><span style="font-family: arial;"> <add name="X-Frame-Options" value="sameorigin" /></span></p><p><span style="font-family: arial;">2) To prevent clients knowing what options the server is serving (unless you want them to know) add the below to configuration > system.webServer > httpProtocol > customHeaders in web.config.</span></p><p><span style="font-family: arial;"><add name="X-Content-Type-Options" value="nosniff" /></span></p><p><span style="font-family: arial;">3) To prevent CSS attacks add the below to configuration > system.webServer > httpProtocol > customHeaders in web.config.</span></p><p><span style="font-family: arial;"><add name="X-XSS-Protection" value="1" /></span></p><p><span style="font-family: arial;">4) Make sure you are using https (TLS) whenever you can.</span></p><p><span style="font-family: arial;">5) Go to your website/web application click on Http Response Headers then remove X-Powered-By</span></p><p><span style="font-family: arial;">header. This will prevent potential hackers knowing which technology you are using.</span></p><p><span style="font-family: arial;"><br /></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7bfiqFGJnqS63CZwdXt2KLARyqayQQu1X4C9pkQDWcQ_dJoqm4gCQmMZEKE4V81rrLJe5HHFOYo3x0b_5YS2yYx76iu-WL7Evcfw8oOIj9r3lwTrP2uzpGmiRSPCGYUx3LAEjbMmYahaBmcjisfg7nNq6-ZBJoocAoIfh1zR91t1oqr8fi2gWWstY/s1713/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="751" data-original-width="1713" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7bfiqFGJnqS63CZwdXt2KLARyqayQQu1X4C9pkQDWcQ_dJoqm4gCQmMZEKE4V81rrLJe5HHFOYo3x0b_5YS2yYx76iu-WL7Evcfw8oOIj9r3lwTrP2uzpGmiRSPCGYUx3LAEjbMmYahaBmcjisfg7nNq6-ZBJoocAoIfh1zR91t1oqr8fi2gWWstY/s320/1.PNG" width="320" /></span></a></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwJEStdX2gkyk1LFpe2IMED48mIyCjC6Ce_RrVnNm8jzAo4ECTe7QOjKyD8Wvv4Lp1l3t-bKBK1OwOImrlNEEoqJKN8-PAEx_-yBvCDEZrg2liZaYN_Gg3brZ_bVeOdl3jq9YdmE8V91UyMooI5_0_mFpi9W7aab1IIZCj-kdmHBDJc9xbkxcDch4D/s1472/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="377" data-original-width="1472" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwJEStdX2gkyk1LFpe2IMED48mIyCjC6Ce_RrVnNm8jzAo4ECTe7QOjKyD8Wvv4Lp1l3t-bKBK1OwOImrlNEEoqJKN8-PAEx_-yBvCDEZrg2liZaYN_Gg3brZ_bVeOdl3jq9YdmE8V91UyMooI5_0_mFpi9W7aab1IIZCj-kdmHBDJc9xbkxcDch4D/s320/2.PNG" width="320" /></span></a></div></div><span style="font-family: arial;"><br /></span><p></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">6) Making sure your servers using strong encryptions and strong <span style="background-color: white; color: #333333;">SSL/TLS</span><span style="background-color: white; color: #333333;"> </span>. You can check this with the IISCrypto tool. </span></p><p><span style="font-family: arial;">7) If you have used JQuery, bootstrap in your applications make sure to upgrade them. This will prevent potential hackers from exploiting the vulnerabilities within them.</span></p><p><span style="font-family: arial;">8) Make sure all your important cookies are marked as secure.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuFJgIw-hPnfl-E1qQELBwqlQDCDYpFe4BsK0_qBhD40jORDbe0k7CjAQrfVfH8w03zuhwubGkgYWFZw7WPTFpjfYDArbB5HvCOlMlyLUm2Y0sJvkytI-x2qvddgZ5tzDUG35owPquZv8MN76q94DHUhTYZu-UysgPfbXCBl78OkBGl7WUG7gfLZcQ/s1918/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="345" data-original-width="1918" height="58" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuFJgIw-hPnfl-E1qQELBwqlQDCDYpFe4BsK0_qBhD40jORDbe0k7CjAQrfVfH8w03zuhwubGkgYWFZw7WPTFpjfYDArbB5HvCOlMlyLUm2Y0sJvkytI-x2qvddgZ5tzDUG35owPquZv8MN76q94DHUhTYZu-UysgPfbXCBl78OkBGl7WUG7gfLZcQ/s320/3.PNG" width="320" /></span></a></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><span style="font-family: arial;">9) Run the regular server updates and patches to prevent any vulnerabilities from being exploited.</span><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">10) Remove Server information from the Response Header</span></div><div><span style="font-family: arial;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibMsaQWHm8ATGlm00j4nQO_zELHSb0pwfi5YqpKlVnrLMdqeTG5AwUe1DA-eZ3B98sHCSI5SoBOBxMCGJpR-uY4OK2g_HieUPWmkiP85rtnwd63C7qwS_tZkk4qS4I4EbwiwUCA96DzCwDP-_te4ofqL9jQnYTAWA5hI94y7_5-RYMQI2ysKKl-UAc/s1489/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="487" data-original-width="1489" height="105" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibMsaQWHm8ATGlm00j4nQO_zELHSb0pwfi5YqpKlVnrLMdqeTG5AwUe1DA-eZ3B98sHCSI5SoBOBxMCGJpR-uY4OK2g_HieUPWmkiP85rtnwd63C7qwS_tZkk4qS4I4EbwiwUCA96DzCwDP-_te4ofqL9jQnYTAWA5hI94y7_5-RYMQI2ysKKl-UAc/s320/4.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /></span><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">https://techcommunity.microsoft.com/t5/iis-support-blog/remove-unwanted-http-response-headers/ba-p/369710</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span><p><br /></p></div>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-16359817676560704272022-11-02T04:24:00.001-07:002022-11-02T04:24:04.283-07:00Calling Powershell scripts from C# to monitor IIS Application pool<p> <span style="font-family: arial;">Hi All,</span></p><p><span style="font-family: arial;">I recently had a requirement to monitor an application pool in one of our server and if it is gets stopped for some odd reason it must be restarted automatically.</span></p><p><span style="font-family: arial;">I created a windows application to achieve this task. The following are two methods which I used to check the status and if it is stopped to start the application pool.</span></p><p><span style="font-family: arial;"> private string GetpoolStatus(string computerName,string appPoolName)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace();</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"> PowerShell powershell = PowerShell.Create();</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"> PSCommand command = new PSCommand();</span></p><p><span style="font-family: arial;"> string result = "";</span></p><p><span style="font-family: arial;"> ScriptBlock scriptBlock = ScriptBlock.Create("Import-Module WebAdministration; Get-WebAppPoolState -NAME " + appPoolName + "");</span></p><p><span style="font-family: arial;"> command.AddCommand("Invoke-Command").AddParameter("ComputerName", computerName).</span></p><p><span style="font-family: arial;"> AddParameter("ScriptBlock", scriptBlock);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> powershell.Commands = command;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> try</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> runspace.Open();</span></p><p><span style="font-family: arial;"> powershell.Runspace = runspace;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> Collection<PSObject> output = powershell.Invoke();</span></p><p><span style="font-family: arial;"> Collection<ErrorRecord> errors = powershell.Streams.Error.ReadAll();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> PSObject pSObject = output.FirstOrDefault();</span></p><p><span style="font-family: arial;"> if(pSObject != null)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> var vMember = pSObject.Members.FirstOrDefault(m => m.Name == "Value");</span></p><p><span style="font-family: arial;"> return vMember.Value.ToString();</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (errors != null && errors.Count > 0)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> foreach (ErrorRecord er in errors)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> result += er.Exception.ToString() + Environment.NewLine;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> catch (Exception ex)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> result = ex.Message.ToString();</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> finally</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> runspace.Dispose();</span></p><p><span style="font-family: arial;"> runspace = null;</span></p><p><span style="font-family: arial;"> powershell.Dispose();</span></p><p><span style="font-family: arial;"> powershell = null;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> return result;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> private bool StartPool(string computerName, string appPoolName)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> PowerShell powershell = PowerShell.Create();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> PSCommand command = new PSCommand();</span></p><p><span style="font-family: arial;"> string result = "";</span></p><p><span style="font-family: arial;"> ScriptBlock scriptBlock = ScriptBlock.Create("Start-WebAppPool -Name " + appPoolName + "");</span></p><p><span style="font-family: arial;"> command.AddCommand("Invoke-Command").AddParameter("ComputerName", computerName).</span></p><p><span style="font-family: arial;"> AddParameter("ScriptBlock", scriptBlock);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> powershell.Commands = command;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> try</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> runspace.Open();</span></p><p><span style="font-family: arial;"> powershell.Runspace = runspace;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> Collection<PSObject> output = powershell.Invoke();</span></p><p><span style="font-family: arial;"> Collection<ErrorRecord> errors = powershell.Streams.Error.ReadAll();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (errors != null && errors.Count > 0)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> return false;</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> catch (Exception ex)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> result = ex.Message.ToString();</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> finally</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> runspace.Dispose();</span></p><p><span style="font-family: arial;"> runspace = null;</span></p><p><span style="font-family: arial;"> powershell.Dispose();</span></p><p><span style="font-family: arial;"> powershell = null;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> return true;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9LcxKsrks8u-PDh-FmAaURP2V-zYb5PL7fKGDxg0oUrT0R2mhw_nphFEJupI_-AP2HeSxB0RZXhEI2xwmagwRpOA1dZgt97e-5QDHES0Yx6QLMFxNtUKlrBDpZf6Dz6AcstGM0lZy51FQwzRZj4aqEt8vMweVv2Wf2YL_kHUv_WP4BpGqqO1Ap1DX/s335/Powershell-335x150.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="335" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9LcxKsrks8u-PDh-FmAaURP2V-zYb5PL7fKGDxg0oUrT0R2mhw_nphFEJupI_-AP2HeSxB0RZXhEI2xwmagwRpOA1dZgt97e-5QDHES0Yx6QLMFxNtUKlrBDpZf6Dz6AcstGM0lZy51FQwzRZj4aqEt8vMweVv2Wf2YL_kHUv_WP4BpGqqO1Ap1DX/s320/Powershell-335x150.png" width="320" /></a></div><br /><p><br /></p><p><br /></p>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-19828885079169053022022-10-17T23:52:00.001-07:002022-10-18T00:15:35.501-07:00Get Remote machine OS Version by querying Active Directory<p> <span style="font-family: arial;">Hi All,</span></p><p><span style="font-family: arial;">Recently I had a requirement to find out the OS Version of remote machine but RPC calling were blocked in all machines due to security reasons. So I had to find another way.</span></p><p><span style="font-family: arial;">I achieved this task simply by querying our organisation Active Directory by computer name. I have copied the method I used to achieve this task.</span></p><p><span style="font-family: arial;">public string GetOSVersion(string computername)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> DirectoryEntry deRoot;</span></p><p><span style="font-family: arial;"> string RootPath;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> RootPath = ConfigurationManager.AppSettings["ADPath"];</span></p><p><span style="font-family: arial;"> deRoot = new DirectoryEntry(ConfigurationManager.AppSettings["ADPath"],</span></p><p><span style="font-family: arial;"> ConfigurationManager.AppSettings["ADUsername"],</span></p><p><span style="font-family: arial;"> ConfigurationManager.AppSettings["ADPassword"]);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> deRoot.Path = RootPath;</span></p><p><span style="font-family: arial;"> DirectorySearcher ds = new DirectorySearcher(deRoot);</span></p><p><span style="font-family: arial;"> string strComputername = string.IsNullOrEmpty(computername) ? "" : "(cn=" + computername + ")";</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> ds.Filter = "(&(objectClass=Computer)" + strComputername + ")";</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> ds.SearchScope = SearchScope.Subtree;</span></p><p><span style="font-family: arial;"> SearchResult results = ds.FindOne();</span></p><p><span style="font-family: arial;"> deRoot.Close();</span></p><p><span style="font-family: arial;"> if (results == null)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> return "";</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> else</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> return results.Properties["operatingSystem"][0].ToString() + </span><span style="font-family: arial;">results.Properties["operatingSystemVersion"][0].ToString()</span><span style="font-family: arial;">;</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOlGbCei7ESnBQONPIjnKT0hUsHs9piDeO9LSrlJBJ6q3S4AELPRiz52uGwvJN1QBDFIMhTUmh1WroZE6ukKmKX6FqVdlFkaQdURFWDHLn-yAWivHjCFBFOSHnzKfVPgm7UCZHOKP5Fd-JnHMCKLKHMxZSiCLNR5dkv-foXr1QEnTGjP_21w42BZD/s309/images.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="163" data-original-width="309" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOlGbCei7ESnBQONPIjnKT0hUsHs9piDeO9LSrlJBJ6q3S4AELPRiz52uGwvJN1QBDFIMhTUmh1WroZE6ukKmKX6FqVdlFkaQdURFWDHLn-yAWivHjCFBFOSHnzKfVPgm7UCZHOKP5Fd-JnHMCKLKHMxZSiCLNR5dkv-foXr1QEnTGjP_21w42BZD/s1600/images.png" width="309" /></a></div><br /><span style="font-family: arial;"><br /></span><p></p>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-87570474500071440092022-08-15T03:19:00.001-07:002022-08-15T03:19:56.178-07:00Azure DevOps - Notification Email not being sent<p><span style="font-family: arial;"> Hi Guys,</span></p><p><span style="font-family: arial;">Recently I encountered an issue of Notification Emails not being sent when an event occurred within my companies Azure DevOps environment.</span></p><p><span style="font-family: arial;">After spending hours going through log files, databases still I couldn't find any issue.</span></p><p><span style="font-family: arial;">Finally I went to the DevOps servers and found out the <b>server time was wrong</b> and once I fixed it.</span></p><p><span style="font-family: arial;">We started receiving Notification Emails.</span></p><p><span style="font-family: arial;">Hope this Helps someone</span> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXw32IceN_E4ItJ6Ic1x4jpXAwL1lheC6FOHKEnD-VQnpk5pYSpgF2muewVyUFCKtGrlP_aC0yEq4BYX53lPOjVNF4WKUvUZmC-oLogYmmR7i8KxwZqQKkaMMjN9sQjEPd5jEi8UHBx55D4OHlzNS93vlMlOJFGhujSXTuJsNSR38h4AO7WI2NA3NC/s284/download.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="177" data-original-width="284" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXw32IceN_E4ItJ6Ic1x4jpXAwL1lheC6FOHKEnD-VQnpk5pYSpgF2muewVyUFCKtGrlP_aC0yEq4BYX53lPOjVNF4WKUvUZmC-oLogYmmR7i8KxwZqQKkaMMjN9sQjEPd5jEi8UHBx55D4OHlzNS93vlMlOJFGhujSXTuJsNSR38h4AO7WI2NA3NC/s1600/download.png" width="284" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p> </p>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-70728850663570445872022-07-31T22:53:00.002-07:002022-07-31T22:53:39.704-07:00Error while adding WCF Service Reference in .NET Core projects behind proxy<p> </p><p class="MsoNormal"><span style="font-family: arial;">Hi All, </span></p><p class="MsoNormal"><span style="font-family: arial;">I faced this issue while adding WCF Service Reference to my .NET Core application. Since our environment was behind proxy I had to do the following to solve it.</span></p><p class="MsoNormal"><span style="font-family: arial;"><br /></span></p><p class="MsoNormal"><span style="font-family: arial;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgD-W2SzPTAgyyopAfUjIEN8JV7-totYn1hj0ZHGQGajmVcIOP-QlJdvY8DePXiaVg9bbmJ3fZ-wc7atJ2YBmXwbffNxDVPxfE8GUChg39S8rPrB4VpYSvQgEm6Tj3caObBCyHYZkmzVQS_2o72XWUCyehPluKNU-kduqqqU65zFWIdQgNhJxt1LJW-" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="468" data-original-width="645" height="299" src="https://blogger.googleusercontent.com/img/a/AVvXsEgD-W2SzPTAgyyopAfUjIEN8JV7-totYn1hj0ZHGQGajmVcIOP-QlJdvY8DePXiaVg9bbmJ3fZ-wc7atJ2YBmXwbffNxDVPxfE8GUChg39S8rPrB4VpYSvQgEm6Tj3caObBCyHYZkmzVQS_2o72XWUCyehPluKNU-kduqqqU65zFWIdQgNhJxt1LJW-=w412-h299" width="412" /></a></span></div><span style="font-family: arial;"><br /><br /></span><p></p><p class="MsoNormal"><o:p><span style="font-family: arial;"> </span></o:p></p>
<p class="MsoNormal"><span style="font-family: arial;">Step 1<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: .75in; mso-list: l0 level1 lfo1; text-indent: -.25in;"><!--[if !supportLists]--><span style="font-family: arial;"><span style="mso-fareast-font-family: Calibri;"><span style="mso-list: Ignore;">-<span style="font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><!--[endif]--><span dir="LTR"></span>Go to <span style="background: white; color: #222222;">%<b>AppData</b>%\NuGet\NuGet.Config</span><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: .75in; mso-list: l0 level1 lfo1; text-indent: -.25in;"><!--[if !supportLists]--><span style="font-family: arial;"><span style="mso-fareast-font-family: Calibri;"><span style="mso-list: Ignore;">-<span style="font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><!--[endif]--><span dir="LTR"></span><span style="background: white; color: #222222;">Then add proxy details
inside <configuration></span><o:p></o:p></span></p>
<pre style="margin-left: .75in; vertical-align: baseline;"><span style="font-family: arial;"><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;"><</span></span><span class="hljs-name"><span style="border: 1pt none windowtext; padding: 0in;">config</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;">></span></span><code><span style="border: 1pt none windowtext; padding: 0in;"><o:p></o:p></span></code></span></pre><pre style="margin-left: .75in; vertical-align: baseline;"><span style="font-family: arial;"><code><span style="border: 1pt none windowtext; padding: 0in;"> </span></code><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;"><</span></span><span class="hljs-name"><span style="border: 1pt none windowtext; padding: 0in;">add</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;"> </span></span><span class="hljs-attr"><span style="border: 1pt none windowtext; padding: 0in;">key</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;">=</span></span><span class="hljs-string"><span style="border: 1pt none windowtext; padding: 0in;">"http_proxy"</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;"> </span></span><span class="hljs-attr"><span style="border: 1pt none windowtext; padding: 0in;">value</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;">=</span></span><span class="hljs-string"><span style="border: 1pt none windowtext; padding: 0in;">"<a href="http://192.168.202.120:9090">http://192.168.21.110:8080</a>"</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;"> /></span></span><code><span style="border: 1pt none windowtext; padding: 0in;"><o:p></o:p></span></code></span></pre><pre style="margin-left: .75in; vertical-align: baseline;"><span style="font-family: arial;"><code><span style="border: 1pt none windowtext; padding: 0in;"> </span></code><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;"></</span></span><span class="hljs-name"><span style="border: 1pt none windowtext; padding: 0in;">config</span></span><span class="hljs-tag"><span style="border: 1pt none windowtext; padding: 0in;">></span></span><o:p></o:p></span></pre>
<p class="MsoListParagraph" style="margin-left: .75in;"><o:p><span style="font-family: arial;"> </span></o:p></p>
<p class="MsoListParagraph" style="margin-left: .75in;"><span style="font-family: arial;">
<o:p></o:p></span></p>
<p class="MsoNormal"><o:p><span style="font-family: arial;"> </span></o:p></p>
<p class="MsoNormal"><span style="font-family: arial;">Step 2 run the below command in command prompt<o:p></o:p></span></p>
<pre style="vertical-align: baseline;"><span style="font-family: arial;"> </span><span style="border: 1pt none windowtext; padding: 0in;"><span style="font-family: arial;">dotnet tool install --global dotnet-svcutil</span><span style="font-family: Consolas;"><o:p></o:p></span></span></pre><pre style="vertical-align: baseline;"><span style="border: none windowtext 1.0pt; font-family: Consolas; mso-border-alt: none windowtext 0in; padding: 0in;"><o:p> </o:p></span></pre><pre style="vertical-align: baseline;"><span style="border: none windowtext 1.0pt; font-family: Consolas; mso-border-alt: none windowtext 0in; padding: 0in;"><o:p> </o:p></span></pre><pre style="vertical-align: baseline;"><span style="border: none windowtext 1.0pt; font-family: Consolas; mso-border-alt: none windowtext 0in; padding: 0in;"><o:p> </o:p></span></pre><pre style="vertical-align: baseline;"><br /></pre><pre style="vertical-align: baseline;"><span style="font-family: Consolas;"><o:p> </o:p></span></pre>
<p class="MsoNormal"><o:p> </o:p></p>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-55895780034745807692022-06-06T22:39:00.002-07:002022-06-06T22:39:26.498-07:00Powershell script to enumerate Folders/Items within a TFS Project<p><span style="font-family: arial;"> Hi,</span></p><p><span style="font-family: arial;">Recently I had a requirement to enumerate folders/Items within a TFS project. The below is the powershell script I used to achieve it.</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">$url = "http://tfsserver:8080/tfs"</span></p><p><span style="font-family: arial;">$folders = Invoke-RestMethod -Uri "$url/CodePortal/QuickWinProjects/_apis/tfvc/items" -Method Get -UseDefaultCredentials -ContentType application/json</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">$folders.value.ForEach({ </span></p><p><span style="font-family: arial;"> Write-Host $_.path</span></p><p><span style="font-family: arial;">})</span></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgoVtdXTxRkQif8hGVzkNnAPcsxHgPU5xL3CU9RQBoGFJYn1h9Y3WyOhoxrgrSrow2pdOziSpuALc-QmA0KO92K8KGCNkeEKlr-v_LYFtsgEP9oY8ZLuvifhbNoOFu1fTJfw7uk0ABzQGGq5S3mVl5xbCwNLVXWqkj273TMS-5YuPZviwvzxcga13H/s351/images.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="351" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgoVtdXTxRkQif8hGVzkNnAPcsxHgPU5xL3CU9RQBoGFJYn1h9Y3WyOhoxrgrSrow2pdOziSpuALc-QmA0KO92K8KGCNkeEKlr-v_LYFtsgEP9oY8ZLuvifhbNoOFu1fTJfw7uk0ABzQGGq5S3mVl5xbCwNLVXWqkj273TMS-5YuPZviwvzxcga13H/s320/images.png" width="320" /></a></div><br /><p><br /></p>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-62757999790013229382022-05-12T01:07:00.007-07:002022-05-12T03:09:59.385-07:00Module to Gzip Compress dynamic aspx pages in Sharepoint<p><span style="font-family: arial;">Hi Guys,</span></p><p><span style="font-family: arial;">Recently we had a requirement to compress (gzip) all the dynamic aspx pages within our Sharepoint portal to be compressed before sent to the browser.</span></p><p><span style="font-family: arial;">So this was the module I created to get the task done.</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">Enable Dynamic Page Compression in IIS then add the module in web.config</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">public class GZipCompressionModule : IHttpModule</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> public GZipCompressionModule()</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> void IHttpModule.Dispose()</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> void IHttpModule.Init(HttpApplication context)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> context.BeginRequest += Context_BeginRequest;</span></p><p><span style="font-family: arial;"> context.EndRequest += Context_EndRequest;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> private void Context_BeginRequest(object sender, EventArgs e)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> HttpApplication app = sender as HttpApplication;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (app.Request.RawUrl.ToLower().Contains(".aspx") &&</span></p><p><span style="font-family: arial;"> app.Response.Filter.GetType() != typeof(GZipStream)</span></p><p><span style="font-family: arial;"> )</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> app.Response.Filter = new GZipStream(app.Response.Filter,</span></p><p><span style="font-family: arial;"> CompressionMode.Compress);</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> private void Context_EndRequest(object sender, EventArgs e)</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> HttpApplication app = sender as HttpApplication;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (app.Request.RawUrl.ToLower().Contains(".aspx"))</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> app.Response.AppendHeader("Content-Encoding", "gzip");</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiTCMCcZ0oezsOspPwohN9AUK6zVPWOekxuyLP7tt7UGxkz-NAT8iw0SrqjSjeSe5U9JlHLHtt4QZZOuHFJlah8NcGvaIUmII-qbUl0ZfDicxPdWePpcTKZgp9PhXcuW-f9TnusIBUeT-713mgK6CbtTakXdf4f5pOobnKkmv0XbOb_ZLWQ9ZVzdZdP" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="655" data-original-width="1024" height="205" src="https://blogger.googleusercontent.com/img/a/AVvXsEiTCMCcZ0oezsOspPwohN9AUK6zVPWOekxuyLP7tt7UGxkz-NAT8iw0SrqjSjeSe5U9JlHLHtt4QZZOuHFJlah8NcGvaIUmII-qbUl0ZfDicxPdWePpcTKZgp9PhXcuW-f9TnusIBUeT-713mgK6CbtTakXdf4f5pOobnKkmv0XbOb_ZLWQ9ZVzdZdP" width="320" /></a></span></div><span style="font-family: arial;"><br /><br /></span><p></p>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-36838923079319148242022-03-15T01:12:00.001-07:002022-03-15T01:12:42.847-07:00Working with Hot Reload in VS 2019<p> </p><p><span style="font-family: arial;">Hi Guys,</span></p><p><br /></p><p class="MsoListParagraph" style="margin-left: 45pt; mso-list: l0 level1 lfo1; text-autospace: none; text-indent: -0.25in;"><!--[if !supportLists]--><span style="font-family: arial;"><span style="color: black; font-size: 9pt;">1)<span style="font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span><!--[endif]--><span dir="LTR"></span>Please update VS 2019 to
Version 16.11.11 by <span style="color: black; font-size: 9pt;"><o:p></o:p></span></span></p>
<p class="MsoListParagraph" style="margin-left: 45pt; text-autospace: none;"><span style="font-family: arial;">Clicking
Help -> Check For Updates <span style="color: black; font-size: 9pt;"><o:p></o:p></span></span></p>
<p class="MsoListParagraph" style="margin-left: 45pt; mso-list: l0 level1 lfo1; text-indent: -0.25in;"><!--[if !supportLists]--><span style="font-family: arial;"><span style="font-size: 11pt;"><span style="mso-list: Ignore;">2)<span style="font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><!--[endif]--><span dir="LTR"></span>Run your project<span style="font-size: 11pt;"><o:p></o:p></span></span></p>
<p class="MsoListParagraph" style="margin-left: 45pt;"><span style="font-family: arial;">Make Code Changes <o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 45pt;"><span style="font-family: arial;">Press on the Fire Icon to
apply code changes without Restarting Project</span><o:p></o:p></p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgaH8gTzI5S6K-4jaGCZiQ_7mJt9GWZvzdDzdNTDfX5X8fwZY-K9GgZGCi6_7phOoUtSH88AcVHWS7KKHgqItgWgDat7sjHQ6-4zwkDDzvgl3QWmhSH6a_bC6h2JgcdA4xo6ED715l9NvtXHtFCUu-vse8uHNMkvLZey1qn-IbLbg178G0VJNnYF3O2" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="128" data-original-width="215" height="191" src="https://blogger.googleusercontent.com/img/a/AVvXsEgaH8gTzI5S6K-4jaGCZiQ_7mJt9GWZvzdDzdNTDfX5X8fwZY-K9GgZGCi6_7phOoUtSH88AcVHWS7KKHgqItgWgDat7sjHQ6-4zwkDDzvgl3QWmhSH6a_bC6h2JgcdA4xo6ED715l9NvtXHtFCUu-vse8uHNMkvLZey1qn-IbLbg178G0VJNnYF3O2" width="320" /></a></div><br /><br />Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-11612471197940936042020-11-09T23:49:00.004-08:002020-11-14T21:27:01.073-08:00Simple API using Python, Flask and pyodbc<p> <span style="font-family: arial;">Hi Guys,</span></p><p><span style="font-family: arial;">I recently learnt the fundamentals of python, one of widely used languages right now. It is super fast in executing and I recommend everyone to give it a try.</span></p><p><span style="font-family: arial;">So I decided to the create a Simple API which will connect to a SQL Server database to perform CRUD operations. Hope you enjoy. </span></p><p><b><span style="font-family: arial;">1) Make sure you have installed python</span></b></p><p><span style="font-family: arial;"> Go to command prompt type "<b>python --version</b>", it will return the installed version of python in your computer as shown in the image. If it throws an error, don't worry you can go <span> </span>to https://www.python.org/downloads/ to download the latest version of python to your pc</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlrj8ZnseFL3xqq0xnTYmmwOVbbrcglrW_xL6bC1IKFHnVIfIiPTtatoZXInl10sDG47Z9MWzw7gtH5pNj-ZzD2TyTRRL2bIEaI_py97rtUdurPVkLV97z8iplSqY6j_ESSd_BAUN-fU/s762/1.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="202" data-original-width="762" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlrj8ZnseFL3xqq0xnTYmmwOVbbrcglrW_xL6bC1IKFHnVIfIiPTtatoZXInl10sDG47Z9MWzw7gtH5pNj-ZzD2TyTRRL2bIEaI_py97rtUdurPVkLV97z8iplSqY6j_ESSd_BAUN-fU/s320/1.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /></span><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><b><span style="font-family: arial;">2) Install pyodbc to connect to SQL Server Database</span></b></p><p><span style="font-family: arial;"><span> </span>Go to command prompt type "<b>pip install pyodbc</b>"</span></p><p><b><span style="font-family: arial;">3) Install flask to create the api application</span></b></p><p><span style="font-family: arial;"><span> </span>Go to command prompt type "<b>pip install flask</b>"</span></p><p><b><span style="font-family: arial;">4) Open Visual Studio Code and create a new file "sqlapi.py" and paste the following code</span></b></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">import</span> pyodbc </div><div><span style="color: #c586c0;">import</span> flask</div><div><span style="color: #c586c0;">import</span> json</div><div><span style="color: #c586c0;">import</span> datetime </div><div><span style="color: #c586c0;">from</span> flask <span style="color: #c586c0;">import</span> request, jsonify</div><br /><div>app = flask.Flask(<span style="color: #9cdcfe;">__name__</span>)</div><div>app.config[<span style="color: #ce9178;">"DEBUG"</span>] = <span style="color: #569cd6;">True</span></div><br /><div><span style="color: #6a9955;">#Constant Strings</span></div><div><span style="color: #6a9955;">#Connection String</span></div><div>conStr = <span style="color: #ce9178;">"""Driver={SQL Server};Server=.\SQLEXPRESS;Database=MyLocations;</span></div><div><span style="color: #ce9178;">Trusted_Connection=yes;"""</span></div><div><span style="color: #6a9955;">#Select Statement</span></div><div>selectStr = <span style="color: #ce9178;">"""SELECT * FROM dbo.Client"""</span></div><div><span style="color: #6a9955;">#Insert Statement</span></div><div>insertStr = <span style="color: #ce9178;">"""INSERT INTO dbo.Client([Code],[Name],[ContactNo],[Location],[Gender],</span></div><div><span style="color: #ce9178;">[DateOfBirth],[FoodOrientation],[StartingWeight],[Goal],[CreatedOn],[CreatedBy]) </span></div><div><span style="color: #ce9178;">VALUES (?,?,?,?,?,?,?,?,?,?,?)"""</span></div><div><span style="color: #6a9955;">#Update Statement</span></div><div>updateStr = <span style="color: #ce9178;">"""UPDATE dbo.Client SET [Code]=?,[Name]=?,[ContactNo]=?,</span></div><div><span style="color: #ce9178;">[Location]=?,[Gender]=?,[DateOfBirth]=?,[FoodOrientation]=?,[StartingWeight]=?,</span></div><div><span style="color: #ce9178;">[Goal]=?,[ModifiedOn]=?,[ModifiedBy]=? WHERE ID = ?"""</span></div><div><span style="color: #6a9955;">#Delete Statement</span></div><div>deleteStr = <span style="color: #ce9178;">"""DELETE FROM dbo.Client"""</span></div><br /><div><span style="color: #6a9955;">#Home Route</span></div><div><span style="color: #dcdcaa;">@app.route</span>(<span style="color: #ce9178;">'/'</span>, <span style="color: #9cdcfe;">methods</span>=[<span style="color: #ce9178;">'GET'</span>])</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">home</span>():</div><div> <span style="color: #c586c0;">return</span> <span style="color: #ce9178;">'''<h1>Client Archive</h1></span></div><div><span style="color: #ce9178;"><p>A prototype API for Clients.</p>'''</span></div><br /><div><span style="color: #6a9955;">#404 Route</span></div><div><span style="color: #dcdcaa;">@app.errorhandler</span>(<span style="color: #b5cea8;">404</span>)</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">page_not_found</span>(<span style="color: #9cdcfe;">e</span>):</div><div> <span style="color: #c586c0;">return</span> <span style="color: #ce9178;">"<h1>404</h1><p>The resource could not be found.</p>"</span>, <span style="color: #b5cea8;">404</span></div><br /><div><span style="color: #6a9955;">#New Client Route</span></div><div><span style="color: #dcdcaa;">@app.route</span>(<span style="color: #ce9178;">'/api/v1/resources/newclient'</span>, <span style="color: #9cdcfe;">methods</span>=[<span style="color: #ce9178;">'POST'</span>])</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">api_newclient</span>():</div><div> client = request.get_json()</div><div> <span style="color: #c586c0;">if</span> client:</div><div> conn = pyodbc.connect(conStr)</div><div> cursor = conn.cursor()</div><div> cursor.execute(insertStr, </div><div> client[<span style="color: #ce9178;">"Code"</span>], </div><div> client[<span style="color: #ce9178;">"Name"</span>],</div><div> client[<span style="color: #ce9178;">"ContactNo"</span>],</div><div> client[<span style="color: #ce9178;">"Location"</span>],</div><div> client[<span style="color: #ce9178;">"Gender"</span>],</div><div> client[<span style="color: #ce9178;">"DateOfBirth"</span>],</div><div> client[<span style="color: #ce9178;">"FoodOrientation"</span>],</div><div> client[<span style="color: #ce9178;">"StartingWeight"</span>],</div><div> client[<span style="color: #ce9178;">"Goal"</span>],</div><div> datetime.datetime.now(),</div><div> client[<span style="color: #ce9178;">"CreatedBy"</span>])</div><div> conn.commit() </div><div> <span style="color: #6a9955;">#Get the Auto Generated ID and Send it back to the Client</span></div><div> row = cursor.execute(<span style="color: #ce9178;">"SELECT @@IDENTITY"</span>).fetchone()</div><div> <span style="color: #c586c0;">if</span> row: </div><div> client[<span style="color: #ce9178;">"ID"</span>] = <span style="color: #4ec9b0;">str</span>(row[<span style="color: #b5cea8;">0</span>])</div><div> <span style="color: #c586c0;">else</span>:</div><div> <span style="color: #c586c0;">return</span> jsonify({<span style="color: #ce9178;">"Error"</span>:<span style="color: #ce9178;">"No Client JSON field provided. Please specify </span></div><div><span style="color: #ce9178;"><span> </span><span> </span>Client JSON."</span>}) </div><br /><br /><div> <span style="color: #c586c0;">return</span> jsonify(client)</div><br /><div><span style="color: #6a9955;">#Save Client Route</span></div><div><span style="color: #dcdcaa;">@app.route</span>(<span style="color: #ce9178;">'/api/v1/resources/saveclient'</span>, <span style="color: #9cdcfe;">methods</span>=[<span style="color: #ce9178;">'POST'</span>])</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">api_saveclient</span>():</div><div> client = request.get_json()</div><br /><div> <span style="color: #c586c0;">if</span> client: </div><div> <span style="color: #c586c0;">if</span> <span style="color: #ce9178;">'ID'</span> <span style="color: #569cd6;">in</span> client:</div><div> <span style="color: #dcdcaa;">id</span> = client[<span style="color: #ce9178;">'ID'</span>]</div><div> <span style="color: #c586c0;">else</span>:</div><div> <span style="color: #c586c0;">return</span> jsonify( {<span style="color: #ce9178;">"Error"</span>:<span style="color: #ce9178;">"No id field provided. Please specify an id."</span>}) </div><div> </div><div> </div><div> conn = pyodbc.connect(conStr)</div><div> cursor = conn.cursor()</div><div> cursor.execute(updateStr, </div><div> client[<span style="color: #ce9178;">"Code"</span>], </div><div> client[<span style="color: #ce9178;">"Name"</span>],</div><div> client[<span style="color: #ce9178;">"ContactNo"</span>],</div><div> client[<span style="color: #ce9178;">"Location"</span>],</div><div> client[<span style="color: #ce9178;">"Gender"</span>],</div><div> client[<span style="color: #ce9178;">"DateOfBirth"</span>],</div><div> client[<span style="color: #ce9178;">"FoodOrientation"</span>],</div><div> client[<span style="color: #ce9178;">"StartingWeight"</span>],</div><div> client[<span style="color: #ce9178;">"Goal"</span>],</div><div> datetime.datetime.now(),</div><div> client[<span style="color: #ce9178;">"ModifiedBy"</span>],</div><div> <span style="color: #dcdcaa;">id</span>)</div><div> conn.commit() </div><div> <span style="color: #c586c0;">else</span>:</div><div> <span style="color: #c586c0;">return</span> jsonify({<span style="color: #ce9178;">"Error"</span>:<span style="color: #ce9178;">"No Client JSON field provided. </span></div><div><span style="color: #ce9178;"><span> </span><span> </span>Please specify Client JSON."</span>}) </div><br /><br /><div> <span style="color: #c586c0;">return</span> jsonify(client)</div><br /><br /><div><span style="color: #6a9955;">#Get All Clients Route</span></div><div><span style="color: #dcdcaa;">@app.route</span>(<span style="color: #ce9178;">'/api/v1/resources/clients'</span>, <span style="color: #9cdcfe;">methods</span>=[<span style="color: #ce9178;">'GET'</span>])</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">api_all</span>():</div><div> conn = pyodbc.connect(conStr)</div><div> cursor = conn.cursor()</div><div> cursor.execute(selectStr)</div><div> result = {}</div><div> data = [] </div><br /><div> <span style="color: #c586c0;">for</span> row <span style="color: #c586c0;">in</span> cursor.fetchall(): </div><div> <span style="color: #c586c0;">for</span> i, crow <span style="color: #c586c0;">in</span> <span style="color: #dcdcaa;">enumerate</span>(cursor.columns(<span style="color: #9cdcfe;">table</span>=<span style="color: #ce9178;">'Client'</span>)): </div><div> result[crow.column_name] = <span style="color: #4ec9b0;">str</span>(row[i]) </div><div> data.append(result)</div><div> result = {}</div><div> </div><div> <span style="color: #c586c0;">return</span> jsonify(data)</div><br /><div><span style="color: #6a9955;">#Get Client Route</span></div><div><span style="color: #dcdcaa;">@app.route</span>(<span style="color: #ce9178;">'/api/v1/resources/client'</span>, <span style="color: #9cdcfe;">methods</span>=[<span style="color: #ce9178;">'GET'</span>])</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">api_client</span>():</div><br /><div> <span style="color: #c586c0;">if</span> <span style="color: #ce9178;">'id'</span> <span style="color: #569cd6;">in</span> request.args:</div><div> <span style="color: #dcdcaa;">id</span> = request.args[<span style="color: #ce9178;">'id'</span>]</div><div> <span style="color: #c586c0;">else</span>:</div><div> <span style="color: #c586c0;">return</span> jsonify( {<span style="color: #ce9178;">"Error"</span>:<span style="color: #ce9178;">"No id field provided. Please specify an id."</span>}) </div><br /><br /><div> conn = pyodbc.connect(conStr)</div><div> cursor = conn.cursor()</div><div> cursor.execute(selectStr + <span style="color: #ce9178;">' where ID= ?'</span>,<span style="color: #dcdcaa;">id</span>)</div><div> result = {}</div><div> <span style="color: #c586c0;">for</span> row <span style="color: #c586c0;">in</span> cursor:</div><div> <span style="color: #c586c0;">for</span> i, crow <span style="color: #c586c0;">in</span> <span style="color: #dcdcaa;">enumerate</span>(cursor.columns(<span style="color: #9cdcfe;">table</span>=<span style="color: #ce9178;">'Client'</span>)):</div><div> result[crow.column_name] = <span style="color: #4ec9b0;">str</span>(row[i]) </div><br /><br /><div> <span style="color: #c586c0;">return</span> jsonify(result)</div><br /><div><span style="color: #6a9955;">#Delete Client</span></div><div><span style="color: #dcdcaa;">@app.route</span>(<span style="color: #ce9178;">'/api/v1/resources/deleteclient'</span>, <span style="color: #9cdcfe;">methods</span>=[<span style="color: #ce9178;">'DELETE'</span>])</div><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">api_deleteclient</span>():</div><br /><div> <span style="color: #c586c0;">if</span> <span style="color: #ce9178;">'id'</span> <span style="color: #569cd6;">in</span> request.args:</div><div> <span style="color: #dcdcaa;">id</span> = request.args[<span style="color: #ce9178;">'id'</span>]</div><div> <span style="color: #c586c0;">else</span>:</div><div> <span style="color: #c586c0;">return</span> jsonify({<span style="color: #ce9178;">"Error"</span>:<span style="color: #ce9178;">"No id field provided. Please specify an id."</span>}) </div><br /><br /><div> conn = pyodbc.connect(conStr)</div><div> cursor = conn.cursor()</div><div> cursor.execute(deleteStr + <span style="color: #ce9178;">' where ID= ?'</span>,<span style="color: #dcdcaa;">id</span>)</div><div> conn.commit()</div><br /><br /><div> <span style="color: #c586c0;">return</span> jsonify({<span style="color: #ce9178;">"Success"</span>:<span style="color: #ce9178;">"Client with ID: "</span>+<span style="color: #dcdcaa;">id</span>+<span style="color: #ce9178;">" deleted successfully"</span> })</div><br /><div><span style="color: #6a9955;">#Start Flask Server</span></div><div>app.run()</div><br /></div><br /><div><b><span style="font-family: arial;">5) Running and testing the API</span></b></div><div><b><span style="font-family: arial;"><br /></span></b></div><div><b><span style="font-family: arial;">To run the api in flask server </span></b></div><div><span style="font-family: arial;">Go to command prompt -> Go to the your source folder -> type "<b>python sqlapi.py</b>" hit enter</span></div><div><span style="font-family: arial;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyY3hyphenhyphenXMf1kQbQO71IJ48hMYGmNXcKau4okwL9JFNLaWDOz79ZwqyTWKsJ903bf4vKruS5z1sO578eaU16t9pX4vd861dIsuam5URGpJyr9swoqcDWwG0NpVpABzZ4U7TA0wbMr1ILKqQ/s660/2.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="154" data-original-width="660" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyY3hyphenhyphenXMf1kQbQO71IJ48hMYGmNXcKau4okwL9JFNLaWDOz79ZwqyTWKsJ903bf4vKruS5z1sO578eaU16t9pX4vd861dIsuam5URGpJyr9swoqcDWwG0NpVpABzZ4U7TA0wbMr1ILKqQ/s320/2.PNG" width="320" /></span></a></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><span style="font-family: arial;">Server will start and be listening on http://127.0.0.1:5000</span><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Testing the GET Methods</span></b></div><div><b><span style="font-family: arial;"><br /></span></b></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiubHG16p6zlwCHSSZKFnvyZG471_tH5-O2MLBaM6bbvBaTH1uDTK8xeOiYMmU5LzWlTSHjv_gbNklWW04wxJ8AWtqKjzQVuOcQf60ACzMdKsjIjbP-zWpGnXLkm5cgG64k9UeYX4jQnL8/s1604/3.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="876" data-original-width="1604" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiubHG16p6zlwCHSSZKFnvyZG471_tH5-O2MLBaM6bbvBaTH1uDTK8xeOiYMmU5LzWlTSHjv_gbNklWW04wxJ8AWtqKjzQVuOcQf60ACzMdKsjIjbP-zWpGnXLkm5cgG64k9UeYX4jQnL8/s320/3.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrMeQwNd0-VimEzeYo16WnVVFPT2Ndm5dTmVK1PkUXjWTDftMVsB_bMem7TBnrz1KBHkf6qo-hK8mHtuHOuBEVo8ijWLUKMrWiNMBR5mXt1CDGgAxfnmH3M8TtpUOA_jIHMUtFjexFqQk/s1613/4.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="594" data-original-width="1613" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrMeQwNd0-VimEzeYo16WnVVFPT2Ndm5dTmVK1PkUXjWTDftMVsB_bMem7TBnrz1KBHkf6qo-hK8mHtuHOuBEVo8ijWLUKMrWiNMBR5mXt1CDGgAxfnmH3M8TtpUOA_jIHMUtFjexFqQk/s320/4.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /><b><br /></b></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Testing the POST Methods</span></b></div><div><b><span style="font-family: arial;"><br /></span></b></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj162h8zuqSCNBndW8pafNDLD9qI8DLD63mn_8C8OHzUjLPFG3cael-gGbUK-E0LSMFbq89c1HZNvOOrca6tSqzq7QnM1Elx9sVefJBeL1bYoTY4MeahMcw2iHmjdVlxEsd0qIjNY1lvfg/s1616/5.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="783" data-original-width="1616" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj162h8zuqSCNBndW8pafNDLD9qI8DLD63mn_8C8OHzUjLPFG3cael-gGbUK-E0LSMFbq89c1HZNvOOrca6tSqzq7QnM1Elx9sVefJBeL1bYoTY4MeahMcw2iHmjdVlxEsd0qIjNY1lvfg/s320/5.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZvzPY1DZ7Dn_tDBL6xVlxK2_Lq8LxGkT5GF1FTjJqt2GmR25T9RiP1xygwFxGp6gT6KiHYEGwuxpH3p1PMVgORWQ844iDDK6XNR8ajbtQ4b-KI3JNkghRmz9ObDHIqZM5LWP5rPTcO8E/s1607/6.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="759" data-original-width="1607" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZvzPY1DZ7Dn_tDBL6xVlxK2_Lq8LxGkT5GF1FTjJqt2GmR25T9RiP1xygwFxGp6gT6KiHYEGwuxpH3p1PMVgORWQ844iDDK6XNR8ajbtQ4b-KI3JNkghRmz9ObDHIqZM5LWP5rPTcO8E/s320/6.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /><b><br /></b></span></div><div><span style="font-family: arial;"><br /></span><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;"><br /></span></b></div><div><b><span style="font-family: arial;">Testing DELETE Method</span></b></div><div><b><span style="font-family: arial;"><br /></span></b></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKbsA5cqExyfe_qSZoxdmBvDgCdzI0Ea4jtS0kmUfIa_I81FKTi1bb_jKDAxbOjHevz-m4E5igQIokIAEij0Boe8634kucTOrYkb7hpNz4tu2itNQzoN2YyqTiiu-WuA9tTbTaLmowe4w/s1606/7.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="610" data-original-width="1606" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKbsA5cqExyfe_qSZoxdmBvDgCdzI0Ea4jtS0kmUfIa_I81FKTi1bb_jKDAxbOjHevz-m4E5igQIokIAEij0Boe8634kucTOrYkb7hpNz4tu2itNQzoN2YyqTiiu-WuA9tTbTaLmowe4w/s320/7.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /><b><br /></b></span></div><div><br /></div></div>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-80316799298105088122020-10-19T23:41:00.002-07:002020-10-19T23:41:52.410-07:00Spinwheel using .NET Core and Winsheel.js<p><span style="font-family: arial;"> Hi All,</span></p><p><span style="font-family: arial;">Recently I had request from one of my friends to create a small application to distribute 1000 gifts among employees of a certain company.</span></p><p><span style="font-family: arial;">1) There were 5 types of gifts</span></p><p><span style="font-family: arial;">2) Each type had 200 gifts</span></p><p><span style="font-family: arial;">3) Gifts must be given in a random way</span></p><p><span style="font-family: arial;">4) Every employee must get a gift</span></p><p><span style="font-family: arial;">5) They should not get a gift which is over</span></p><p><span style="font-family: arial;">So created a small application with a .NET Core backend, html, javascript. I used Winwheel.js to create the spinwheel. Hope you like it.</span></p><p><b><span style="font-family: arial;">1) Solution </span></b></p><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq5145XhzxQAkQelRuMDjtUEKVX20_oIyCqvNtaGzhJgZNN5AlhkdHE0shFQqxOoGtOMe5mm2y5ByDjrW6Dj2MBuBomtdJDSx5wdYVcRROJpxsWXKdmr879SE6tYHYstdPHlWO43tjrN0/s262/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="262" data-original-width="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq5145XhzxQAkQelRuMDjtUEKVX20_oIyCqvNtaGzhJgZNN5AlhkdHE0shFQqxOoGtOMe5mm2y5ByDjrW6Dj2MBuBomtdJDSx5wdYVcRROJpxsWXKdmr879SE6tYHYstdPHlWO43tjrN0/s0/1.PNG" /></span></a></div></blockquote><span style="font-family: arial;"><br /></span><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><b><span style="font-family: arial;"><br /></span></b></p><p><b><span style="font-family: arial;"><br /></span></b></p><p><b><span style="font-family: arial;">2) SQL Tables</span></b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgws34Ksrqph5JvQzjeaBBf3Odu3b6O7cgjxoyw5rATSug7llTD0LKQr2xmCdFiyDmvqr6wZnbJSVXGYKi0_uu05IWFtw-Tg9asZ_Dfnq2MVvmXNFMQSKc_JpBliBIORS06jjHKR7I5C-0/s518/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="151" data-original-width="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgws34Ksrqph5JvQzjeaBBf3Odu3b6O7cgjxoyw5rATSug7llTD0LKQr2xmCdFiyDmvqr6wZnbJSVXGYKi0_uu05IWFtw-Tg9asZ_Dfnq2MVvmXNFMQSKc_JpBliBIORS06jjHKR7I5C-0/s320/2.PNG" width="320" /></span></a></div><span style="font-family: arial;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilfJ-rUCXXFRT2gK0ynkLvSR5CnlmrmlynnL_106n1ZmVEpMK2mNs2xvrY8V2NPAwBcIFb3Iax4ureRF60utKnmdmPrqZ6weZlHeGDENXFELpK6M5TnkhT1sjcyaoWt6vppQyFAEvYhlg/s392/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: arial;"><img border="0" data-original-height="119" data-original-width="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilfJ-rUCXXFRT2gK0ynkLvSR5CnlmrmlynnL_106n1ZmVEpMK2mNs2xvrY8V2NPAwBcIFb3Iax4ureRF60utKnmdmPrqZ6weZlHeGDENXFELpK6M5TnkhT1sjcyaoWt6vppQyFAEvYhlg/s320/3.PNG" width="320" /></span></a></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><b><span style="font-family: arial;">3) HomeController.cs</span></b><div><span style="font-family: arial;"><br /></span></div><div><div><span style="font-family: arial;">using System;</span></div><div><span style="font-family: arial;">using System.Collections.Generic;</span></div><div><span style="font-family: arial;">using System.Diagnostics;</span></div><div><span style="font-family: arial;">using System.Linq;</span></div><div><span style="font-family: arial;">using System.Threading.Tasks;</span></div><div><span style="font-family: arial;">using Microsoft.AspNetCore.Mvc;</span></div><div><span style="font-family: arial;">using Microsoft.Extensions.Configuration;</span></div><div><span style="font-family: arial;">using Microsoft.Extensions.Logging;</span></div><div><span style="font-family: arial;">using SpinWheelAppCore.Models;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">namespace SpinWheelAppCore.Controllers</span></div><div><span style="font-family: arial;">{</span></div><div><span style="font-family: arial;"> public class HomeController : Controller</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> private readonly ILogger<HomeController> _logger;</span></div><div><span style="font-family: arial;"> private readonly IConfiguration _configuration;</span></div><div><span style="font-family: arial;"> private readonly PrizeContext _entities;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public int MaxPrizeCount</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> get</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> return int.Parse(_configuration["MaxPrizeCount"]);</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> public int MaxPrizeTotalCount</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> get</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> return int.Parse(_configuration["MaxPrizeTotalCount"]);</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> public int PrizeCategoryCount</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> get</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> return int.Parse(_configuration["PrizeCategoryCount"]);</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public HomeController(ILogger<HomeController> logger,</span></div><div><span style="font-family: arial;"> IConfiguration configuration,</span></div><div><span style="font-family: arial;"> PrizeContext entities)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> _logger = logger;</span></div><div><span style="font-family: arial;"> _configuration = configuration;</span></div><div><span style="font-family: arial;"> _entities = entities;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public IActionResult Index()</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> return View(new HomeViewModel() { MaxPrizeTotalCount = MaxPrizeTotalCount,PrizeCategoryCount=PrizeCategoryCount });</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public IActionResult Reset()</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> return View();</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> [HttpPost]</span></div><div><span style="font-family: arial;"> public IActionResult Reset(string submitButton)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> if (!string.IsNullOrEmpty(submitButton) && submitButton == "Yes")</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> _entities.Prize.RemoveRange(_entities.Prize);</span></div><div><span style="font-family: arial;"> _entities.SaveChanges();</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> </span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> </span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> return RedirectToAction("Index");</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public ReturnDataMsg GetResults()</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> ReturnDataMsg returnDataMsg = new ReturnDataMsg();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> try</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> int count = _entities.Prize.Count();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> var prizeList = (from pc in _entities.PrizeCategory</span></div><div><span style="font-family: arial;"> select new PrizeCount() { PrizeName = pc.Name, Count = MaxPrizeCount }).ToList();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> var prizeWonList = (from p in _entities.Prize</span></div><div><span style="font-family: arial;"> orderby p.Prize1</span></div><div><span style="font-family: arial;"> group p by p.Prize1 into grp</span></div><div><span style="font-family: arial;"> select new PrizeCount() { PrizeName = grp.Key, Count = MaxPrizeCount - grp.Count() }).ToList();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> returnDataMsg.TotalZeroCount = prizeWonList.Where(p => p.Count == 0).Count();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> PrizeCount objFound = null;</span></div><div><span style="font-family: arial;"> foreach (var prize in prizeList)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> objFound = prizeWonList.Where(p => p.PrizeName == prize.PrizeName).SingleOrDefault();</span></div><div><span style="font-family: arial;"> if (objFound != null)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> prize.Count = objFound.Count;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> objFound = null;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> returnDataMsg.PrizeCounts = prizeList;</span></div><div><span style="font-family: arial;"> returnDataMsg.TotalCount = count;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> catch (Exception ex)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> return returnDataMsg;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> [HttpPost]</span></div><div><span style="font-family: arial;"> public ReturnDataMsg PostPrize(string id)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> ReturnDataMsg returnDataMsg = new ReturnDataMsg();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> try</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> if (!string.IsNullOrEmpty(id))</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> int count = _entities.Prize.Count();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> List<PrizeCount> prizeWonList = (from p in _entities.Prize</span></div><div><span style="font-family: arial;"> orderby p.Prize1</span></div><div><span style="font-family: arial;"> group p by p.Prize1 into grp</span></div><div><span style="font-family: arial;"> select new PrizeCount() { PrizeName = grp.Key, Count = MaxPrizeCount - grp.Count() }).ToList();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> //bool havePrize = prizeWonList.Where(l => l.PrizeName == value && l.Count > 0).SingleOrDefault() != null;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> if (count < MaxPrizeTotalCount)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> _entities.Prize.Add(new Prize() { Prize1 = id, CreatedOn = DateTime.Now });</span></div><div><span style="font-family: arial;"> _entities.SaveChanges();</span></div><div><span style="font-family: arial;"> count++;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> prizeWonList = (from p in _entities.Prize</span></div><div><span style="font-family: arial;"> orderby p.Prize1</span></div><div><span style="font-family: arial;"> group p by p.Prize1 into grp</span></div><div><span style="font-family: arial;"> select new PrizeCount() { PrizeName = grp.Key, Count = MaxPrizeCount - grp.Count() }).ToList();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> var prizeList = (from pc in _entities.PrizeCategory</span></div><div><span style="font-family: arial;"> select new PrizeCount() { PrizeName = pc.Name, Count = MaxPrizeCount }).ToList();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> returnDataMsg.TotalZeroCount = prizeWonList.Where(p => p.Count == 0).Count();</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> PrizeCount objFound = null;</span></div><div><span style="font-family: arial;"> foreach (var prize in prizeList)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> objFound = prizeWonList.Where(p => p.PrizeName == prize.PrizeName).SingleOrDefault();</span></div><div><span style="font-family: arial;"> if (objFound != null)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> prize.Count = objFound.Count;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> objFound = null;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> returnDataMsg.PrizeCounts = prizeList;</span></div><div><span style="font-family: arial;"> returnDataMsg.TotalCount = count;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> catch (Exception ex)</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> return returnDataMsg;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;">}</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">4) Models.cs</span></b></div><div><span style="font-family: arial;"><br /></span></div><div><div><span style="font-family: arial;">using System;</span></div><div><span style="font-family: arial;">using System.Collections.Generic;</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">namespace SpinWheelAppCore.Models</span></div><div><span style="font-family: arial;">{</span></div><div><span style="font-family: arial;"> public class ErrorViewModel</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> public string RequestId { get; set; }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public class HomeViewModel {</span></div><div><span style="font-family: arial;"> public int MaxPrizeTotalCount</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> get;set;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public int PrizeCategoryCount</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> get; set;</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public class PrizeCount</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> public string PrizeName { get; set; }</span></div><div><span style="font-family: arial;"> public int Count { get; set; }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> public class ReturnDataMsg</span></div><div><span style="font-family: arial;"> {</span></div><div><span style="font-family: arial;"> public List<PrizeCount> PrizeCounts { get; set; }</span></div><div><span style="font-family: arial;"> public int TotalCount { get; set; }</span></div><div><span style="font-family: arial;"> public int TotalZeroCount { get; set; }</span></div><div><span style="font-family: arial;"> }</span></div><div><span style="font-family: arial;">}</span></div></div><div><span style="font-family: arial;"><br /></span></div><p><b><span style="font-family: arial;">5) Index View (Index.cshtml)</span></b></p><p><span style="font-family: arial;">@model HomeViewModel</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">@{</span></p><p><span style="font-family: arial;"> ViewData["Title"] = "Click on the Wheel to Play & Win";</span></p><p><span style="font-family: arial;">}</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;">< <div id="completeModal" class="modal" tabindex="-1" role="dialog"></span></p><p><span style="font-family: arial;"> <div class="modal-dialog" role="document"></span></p><p><span style="font-family: arial;"> <div class="modal-content"></span></p><p><span style="font-family: arial;"> <div class="modal-header"></span></p><p><span style="font-family: arial;"> <h5 class="modal-title">Competition Finished</h5></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> <div class="modal-body"></span></p><p><span style="font-family: arial;"> <p>Congratulations to all Prize Winners. Have a nice day!</p></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> <div class="modal-footer"></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"></div></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><div class="row"></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> <div class="col-md-8"></span></p><p><span style="font-family: arial;"> <table cellpadding="0" cellspacing="0" align="center" valign="center" border="0"></span></p><p><span style="font-family: arial;"> <tr></span></p><p><span style="font-family: arial;"> <td height="580" class="the_wheel"></span></p><p><span style="font-family: arial;"> <canvas onclick="startSpin();" id="canvas" width="434" height="434"></span></p><p><span style="font-family: arial;"> <p style="{color: white}" align="center">Sorry, your browser doesn't support canvas. Please try another.</p></span></p><p><span style="font-family: arial;"> </canvas></span></p><p><span style="font-family: arial;"> </td></span></p><p><span style="font-family: arial;"> </tr></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </table></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> <div class="col-md-4"></span></p><p><span style="font-family: arial;"> <div class="container"></span></p><p><span style="font-family: arial;"> <div class="card-deck mb-3 text-center"></span></p><p><span style="font-family: arial;"> <div class="card mb-4 box-shadow"></span></p><p><span style="font-family: arial;"> <div class="card-header"></span></p><p><span style="font-family: arial;"> <h4 class="my-0 font-weight-normal">Results</h4></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> <div id="resultBody1" class="card-body"></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"> <div id="resultFooter" style="display:none" class="card-footer"></span></p><p><span style="font-family: arial;"> <a asp-action="Reset" class="btn btn-lg btn-block btn-primary">Reset</a></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </div></span></p><p><span style="font-family: arial;"></div></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><script type="text/javascript"></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Create new wheel object specifying the parameters at creation time.</span></p><p><span style="font-family: arial;"> let theWheel = new Winwheel({</span></p><p><span style="font-family: arial;"> 'numSegments': 5, // Specify number of segments.</span></p><p><span style="font-family: arial;"> 'outerRadius': 212, // Set outer radius so wheel fits inside the background.</span></p><p><span style="font-family: arial;"> 'textFontSize': 28, // Set font size as desired.</span></p><p><span style="font-family: arial;"> //'segments' : // Define segments including colour and text.</span></p><p><span style="font-family: arial;"> //[</span></p><p><span style="font-family: arial;"> // {'fillStyle' : '#888888', 'text' : 'Prize 1'},</span></p><p><span style="font-family: arial;"> // {'fillStyle' : '#89f26e', 'text' : 'Prize 2'},</span></p><p><span style="font-family: arial;"> // {'fillStyle' : '#7de6ef', 'text' : 'Prize 3'},</span></p><p><span style="font-family: arial;"> // {'fillStyle' : '#e7706f', 'text' : 'Prize 4'},</span></p><p><span style="font-family: arial;"> // {'fillStyle' : '#eae56f', 'text' : 'Prize 5'}</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> //],</span></p><p><span style="font-family: arial;"> 'animation': // Specify the animation to use.</span></p><p><span style="font-family: arial;"> {</span></p><p><span style="font-family: arial;"> 'type': 'spinToStop',</span></p><p><span style="font-family: arial;"> 'duration': 5, // Duration in seconds.</span></p><p><span style="font-family: arial;"> 'spins': 12, // Number of complete spins.</span></p><p><span style="font-family: arial;"> 'callbackFinished': alertPrize</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> });</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Vars used by the code in this page to do power controls.</span></p><p><span style="font-family: arial;"> let wheelPower = 0;</span></p><p><span style="font-family: arial;"> let wheelSpinning = false;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> // Function to handle the onClick on the power buttons.</span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> function powerSelected(powerLevel) {</span></p><p><span style="font-family: arial;"> // Ensure that power can't be changed while wheel is spinning.</span></p><p><span style="font-family: arial;"> if (wheelSpinning == false) {</span></p><p><span style="font-family: arial;"> // Reset all to grey incase this is not the first time the user has selected the power.</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Now light up all cells below-and-including the one selected by changing the class.</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Set wheelPower var used when spin button is clicked.</span></p><p><span style="font-family: arial;"> wheelPower = powerLevel;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> // Click handler for spin button.</span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> function startSpin() {</span></p><p><span style="font-family: arial;"> // Ensure that spinning can't be clicked again while already running.</span></p><p><span style="font-family: arial;"> if (wheelSpinning == false) {</span></p><p><span style="font-family: arial;"> // Based on the power level selected adjust the number of spins for the wheel, the more times is has</span></p><p><span style="font-family: arial;"> // to rotate with the duration of the animation the quicker the wheel spins.</span></p><p><span style="font-family: arial;"> if (wheelPower == 1) {</span></p><p><span style="font-family: arial;"> theWheel.animation.spins = 3;</span></p><p><span style="font-family: arial;"> } else if (wheelPower == 2) {</span></p><p><span style="font-family: arial;"> theWheel.animation.spins = 8;</span></p><p><span style="font-family: arial;"> } else if (wheelPower == 3) {</span></p><p><span style="font-family: arial;"> theWheel.animation.spins = 15;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Disable the spin button so can't click again while wheel is spinning.</span></p><p><span style="font-family: arial;"> //document.getElementById('spin_button').src = "spin_off.png";</span></p><p><span style="font-family: arial;"> //document.getElementById('spin_button').className = "";</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Begin the spin animation by calling startAnimation on the wheel object.</span></p><p><span style="font-family: arial;"> theWheel.startAnimation();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Set to true so that power can't be changed and spin button re-enabled during</span></p><p><span style="font-family: arial;"> // the current animation. The user will have to reset before spinning again.</span></p><p><span style="font-family: arial;"> wheelSpinning = true;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> // Function for reset button.</span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> function resetWheel() {</span></p><p><span style="font-family: arial;"> theWheel.stopAnimation(false); // Stop the animation, false as param so does not call callback function.</span></p><p><span style="font-family: arial;"> theWheel.rotationAngle = 0; // Re-set the wheel angle to 0 degrees.</span></p><p><span style="font-family: arial;"> theWheel.draw(); // Call draw to render changes to the wheel.</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> wheelSpinning = false; // Reset to false to power buttons and spin can be clicked again.</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> // Called when the spin animation has finished by the callback feature of the wheel because I specified callback in the parameters</span></p><p><span style="font-family: arial;"> // note the indicated segment is passed in as a parmeter as 99% of the time you will want to know this to inform the user of their prize.</span></p><p><span style="font-family: arial;"> // -------------------------------------------------------</span></p><p><span style="font-family: arial;"> function alertPrize(indicatedSegment) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> // Do basic alert of the segment text. You would probably want to do something more interesting with this information.</span></p><p><span style="font-family: arial;"> bootbox.alert("Congratulations!!! You have won " + indicatedSegment.text, function () {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> postResult(indicatedSegment.text);</span></p><p><span style="font-family: arial;"> });</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> function getResult() {</span></p><p><span style="font-family: arial;"> $.get("../Home/GetResults", function (data) {</span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"> if (data) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> initWheel(data);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> });</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> function drawInitialWheel() {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> var segments = [</span></p><p><span style="font-family: arial;"> { 'fillStyle': '#888888', 'text': 'Prize 1' },</span></p><p><span style="font-family: arial;"> { 'fillStyle': '#89f26e', 'text': 'Prize 2' },</span></p><p><span style="font-family: arial;"> { 'fillStyle': '#7de6ef', 'text': 'Prize 3' },</span></p><p><span style="font-family: arial;"> { 'fillStyle': '#e7706f', 'text': 'Prize 4' },</span></p><p><span style="font-family: arial;"> { 'fillStyle': '#eae56f', 'text': 'Prize 5' }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> ];</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> for (var l = 0; l < theWheel.segments.length; l++) {</span></p><p><span style="font-family: arial;"> theWheel.deleteSegment(l);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> for (var i = 0; i < segments.length; i++) {</span></p><p><span style="font-family: arial;"> theWheel.addSegment({ 'fillStyle': segments[i]["fillStyle"], 'text': segments[i]["text"] });</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> function initWheel(data) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> $("#resultBody1").empty();</span></p><p><span style="font-family: arial;"> $("#resultBody1").append("<h1 class='totalCard card-title pricing-card-title'> " + data.totalCount + "/@Model.MaxPrizeTotalCount" + " <small class='text-muted'>Prizes Won</small> </h1>");</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (data.totalCount > 0) {</span></p><p><span style="font-family: arial;"> $("#resultFooter").attr("style", "display:normal");</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (data.prizeCounts) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> let tempSegments = theWheel.segments.map((x) => x);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> for (var l = 1; l < theWheel.segments.length; l++) {</span></p><p><span style="font-family: arial;"> theWheel.deleteSegment(l);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> //theWheel.deleteAllSegments();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> //theWheel.deleteSegment();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> //console.log(theWheel.numSegments);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> var segIndex = 1;</span></p><p><span style="font-family: arial;"> var addedSegments = false;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> for (var i = 0; i < data.prizeCounts.length; i++) {</span></p><p><span style="font-family: arial;"> $("#resultBody1").append("<h3 class='resultCard card-title pricing-card-title'>" + data.prizeCounts[i].count + " <small class='text-muted'>" + data.prizeCounts[i].prizeName + " Remaining </small> </h3>");</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> let segment = null;</span></p><p><span style="font-family: arial;"> let dataPrize = null;</span></p><p><span style="font-family: arial;"> for (var l = 0; l < tempSegments.length; l++) {</span></p><p><span style="font-family: arial;"> if (tempSegments[l] && tempSegments[l].text === data.prizeCounts[i].prizeName && data.prizeCounts[i].count > 0) {</span></p><p><span style="font-family: arial;"> segment = tempSegments[l];</span></p><p><span style="font-family: arial;"> dataPrize = data.prizeCounts[i];</span></p><p><span style="font-family: arial;"> break;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (segment) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (i === 0) {</span></p><p><span style="font-family: arial;"> segment.startAngle = 0;</span></p><p><span style="font-family: arial;"> segment.endAngle = 360 / (5 - data.TotalZeroCount);</span></p><p><span style="font-family: arial;"> theWheel.addSegment(segment, segIndex++);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> addedSegments = true;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> else {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> let exSegment = null;</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> for (var l = 0; l < theWheel.segments.length; l++) {</span></p><p><span style="font-family: arial;"> if (theWheel.segments[l] && theWheel.segments[l].text === segment.text) {</span></p><p><span style="font-family: arial;"> exSegment = theWheel.segments[l];</span></p><p><span style="font-family: arial;"> break;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (exSegment === null && data.TotalZeroCount != @Model.PrizeCategoryCount -1) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> theWheel.addSegment({ 'fillStyle': segment.fillStyle, 'text': segment.text }, segIndex++);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> addedSegments = true;</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> else {</span></p><p><span style="font-family: arial;"> segment.startAngle = 0;</span></p><p><span style="font-family: arial;"> segment.endAngle = 360 / (@Model.PrizeCategoryCount - data.totalZeroCount);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> theWheel.addSegment(segment, segIndex++);</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (addedSegments || (data.totalZeroCount === @Model.PrizeCategoryCount -1))</span></p><p><span style="font-family: arial;"> theWheel.deleteSegment(segIndex);</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> theWheel.draw();</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (data.totalCount === @Model.MaxPrizeTotalCount) {</span></p><p><span style="font-family: arial;"> $("#completeModal").modal({</span></p><p><span style="font-family: arial;"> backdrop: 'static',</span></p><p><span style="font-family: arial;"> keyboard: false</span></p><p><span style="font-family: arial;"> });</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> function postResult(value) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> </span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> $.post("../Home/PostPrize/" + value, function (data) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> if (data) {</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> initWheel(data);</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> });</span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"><br /></span></p><p><span style="font-family: arial;"> resetWheel();</span></p><p><span style="font-family: arial;"> }</span></p><p><span style="font-family: arial;"> drawInitialWheel();</span></p><p><span style="font-family: arial;"> powerSelected(3);</span></p><p><span style="font-family: arial;"> getResult();</span></p><p><span style="font-family: arial;"></script></span></p><p><b><span style="font-family: arial;">6) In Action</span></b></p><p><b></b></p><div class="separator" style="clear: both; text-align: center;"><b><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVm1CxVknZ5Ha0PMJ0qs7JWrv3RyGZzkN6AQPjv2Xvrvqlyb7O4DoTjZd56xb_uBKGcWJvQ1rh6J4QooOdgjVBZfG1xxni68zxb5h3IyVfd_K75ElLGnL9t-0xjcaLwRJsmBcz1puPLZs/s1919/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1038" data-original-width="1919" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVm1CxVknZ5Ha0PMJ0qs7JWrv3RyGZzkN6AQPjv2Xvrvqlyb7O4DoTjZd56xb_uBKGcWJvQ1rh6J4QooOdgjVBZfG1xxni68zxb5h3IyVfd_K75ElLGnL9t-0xjcaLwRJsmBcz1puPLZs/s320/4.PNG" width="320" /></a></b></div><b><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLTZmwyPxL36l9lpQoPTd2iEpRdh77F_MvgdbnZFBgBsrgXPnMJOENrSvuZd0LLfoRAST5i8nXYHCp2VgAiEl6Rka0nDttUKRGL2OdjjyttMWFTnR3SCocA8bEQFw-9iHi3OothgZsuoc/s1920/5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1021" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLTZmwyPxL36l9lpQoPTd2iEpRdh77F_MvgdbnZFBgBsrgXPnMJOENrSvuZd0LLfoRAST5i8nXYHCp2VgAiEl6Rka0nDttUKRGL2OdjjyttMWFTnR3SCocA8bEQFw-9iHi3OothgZsuoc/s320/5.PNG" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCMbjF6XpE3uBffVFi01C9h0YWMKFuznKB6cV0mE8xPwt02nSuHRjhPLjzrf0wq_3ebTI6uyDGnvfQya_AHK7Fl9ucLW1vZp2bQI_kB5jzOdM8Kv8arZdRKznI4LWKiCDr-mv7aViTVPQ/s1919/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="1919" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCMbjF6XpE3uBffVFi01C9h0YWMKFuznKB6cV0mE8xPwt02nSuHRjhPLjzrf0wq_3ebTI6uyDGnvfQya_AHK7Fl9ucLW1vZp2bQI_kB5jzOdM8Kv8arZdRKznI4LWKiCDr-mv7aViTVPQ/s320/6.PNG" width="320" /></a></div><br /><span style="font-family: arial;"><br /></span></b><p></p><p><span style="font-family: arial;"><br /></span></p><p><br /></p></div>Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-51934991930430766812020-06-17T12:24:00.001-07:002020-06-17T12:24:20.934-07:00FedAuth Cookie Not getting Created on Safari<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Hi Guys,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Recently we encountered an issue in our sharepoint portal where FedAuth Cookie generated from SPFederationAuthenticationModule was not getting created on certain Safari browsers. After a long hours of testing , trials and error. We found that the issue was caused by SameSite property of the browser Cookie.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">So in order to fix it, I applied the below code snippet, just after the SetPrincipalAndWriteSessionToken of the SPFederationAuthenticationModule.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><b>fam.SetPrincipalAndWriteSessionToken(securityToken);</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> </b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b>string userAgent = Request.ServerVariables["HTTP_USER_AGENT"];</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><b>if ((userAgent.Contains("CPU iPhone OS") ||</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> userAgent.Contains("iPad; CPU OS") ||</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> userAgent.Contains("Macintosh; Intel Mac OS X")) &&</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> userAgent.Contains("Safari"))</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> {</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> HttpCookie httpCookie = null;</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><b> for (int i = 0; i < Response.Cookies.AllKeys.Count(); i++)</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> {</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> httpCookie = Response.Cookies[Response.Cookies.AllKeys[i]]; </b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> httpCookie.SameSite = SameSiteMode.Lax;</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> </b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> } </b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b> }</b></span></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-89161226571216066882020-04-21T14:36:00.003-07:002020-04-21T14:38:05.218-07:00Microservices with .NET Core Web API, EntityFrameworkCore and Ocelot API Gateway<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Hi Guys,</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">I created a simple Microservices solution using .NET Core Web API, EntityFrameworkCore and Ocelot API Gateway. Hope you like it.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">1) Solution </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The solution consists of four .NET Core Projects. APIGateway, ProductMicroservice, UserMicroservice are Web API projects while Microsoft.DataAccess is a class library with EntityFrameworkCore. And this project is referred by ProductMicroservice, UserMicroservice.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL-V3PPHq0AhbEBJl8D9Ne-B32Ox4cgRxLuvnPE5p4f6RfzBgceqHXACTvM_PSj7Qtup_gmPRj9Lq-fpse2Jidu583xctbk15vIWgIlNpDeIe9pDC9M8Pz2UtVw2EyNWJZQYL5yyFdUjg/s1600/Solution.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="674" data-original-width="312" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL-V3PPHq0AhbEBJl8D9Ne-B32Ox4cgRxLuvnPE5p4f6RfzBgceqHXACTvM_PSj7Qtup_gmPRj9Lq-fpse2Jidu583xctbk15vIWgIlNpDeIe9pDC9M8Pz2UtVw2EyNWJZQYL5yyFdUjg/s320/Solution.PNG" width="148" /></span></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">2) UserMicroservice </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This project has a simple UserController as following,</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">namespace UserMicroservice.Controllers</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">{</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [Route("api/[controller]")]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class UserController : Controller</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> DatabaseContext _databaseContext;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public UserController()</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> _databaseContext = new DatabaseContext();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // GET: api/<controller></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [HttpGet]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public IEnumerable<User> Get()</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return _databaseContext.Users.ToList();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // GET api/<controller>/5</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [HttpGet("{id}")]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public User Get(int id)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return _databaseContext.Users.Find(id);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // POST api/<controller></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [HttpPost]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public IActionResult Post([FromBody]User model)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> try</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> _databaseContext.Users.Add(model);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> _databaseContext.SaveChanges();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return StatusCode(StatusCodes.Status201Created, model);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> catch (Exception)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return StatusCode(StatusCodes.Status500InternalServerError);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">}</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">3) ProductMicroservice</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This project has a simple ProductController as following,</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">namespace ProductMicroservice.Controllers</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">{</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [Route("api/[controller]")]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class ProductController : Controller</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> DatabaseContext _databaseContext;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public ProductController()</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> _databaseContext = new DatabaseContext();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // GET: api/<controller></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [HttpGet]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public IEnumerable<Product> Get()</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return _databaseContext.Products.ToList();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // GET api/<controller>/5</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [HttpGet("{id}")]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public Product Get(int id)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return _databaseContext.Products.Find(id);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // POST api/<controller></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> [HttpPost]</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public IActionResult Post([FromBody]Product model)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> try</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> _databaseContext.Products.Add(model);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> _databaseContext.SaveChanges();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return StatusCode(StatusCodes.Status201Created, model);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> catch (Exception)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return StatusCode(StatusCodes.Status500InternalServerError);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">}</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">4) API Gateway</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This Web API acts as the interface between end users and our microservices. This uses Ocelot, an opensource API Gateway with a ton of exciting features.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Please refer <a href="https://ocelot.readthedocs.io/en/latest/introduction/gettingstarted.html">https://ocelot.readthedocs.io/en/latest/introduction/gettingstarted.html</a> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">- Startup.cs</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">namespace APIGateway</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">{</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class Startup</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // This method gets called by the runtime. Use this method to add services to the container.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public void ConfigureServices(IServiceCollection services)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <b> services.AddOcelot();</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> if (env.IsDevelopment())</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> app.UseDeveloperExceptionPage();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> await <b>app.UseOcelot();</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">}</span><br />
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">- Program.cs</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">namespace APIGateway</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">{</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class Program</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public static void Main(string[] args)</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> CreateHostBuilder(args).Build().Run();</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public static IHostBuilder CreateHostBuilder(string[] args) =></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> Host.CreateDefaultBuilder(args)</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> .ConfigureWebHostDefaults(webBuilder =></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> webBuilder.UseStartup<Startup>();</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> })</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> .ConfigureAppConfiguration((hostingConfig, config)=> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <b>config.AddJsonFile("ocelot.json");</b></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> });</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">}</span></div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">- ocelot.json</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">{</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "ReRoutes": [</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamPathTemplate": "/api/user",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamScheme": "http",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamHostAndPorts": [</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Host": "localhost",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Port": 53656</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ],</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamPathTemplate": "/user",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamHttpMethod": [ "GET", "POST" ]</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> },</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamPathTemplate": "/api/user/{id}",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamScheme": "http",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamHostAndPorts": [</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Host": "localhost",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Port": 53656</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ],</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamPathTemplate": "/user/{id}",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamHttpMethod": [ "GET" ]</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> },</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamPathTemplate": "/api/product",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamScheme": "http",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamHostAndPorts": [</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Host": "localhost",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Port": 59090</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ],</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamPathTemplate": "/product",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamHttpMethod": [ "GET", "POST" ]</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> },</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamPathTemplate": "/api/product/{id}",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamScheme": "http",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "DownstreamHostAndPorts": [</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Host": "localhost",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "Port": 59090</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ],</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamPathTemplate": "/product/{id}",</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> "UpstreamHttpMethod": [ "GET" ]</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ]</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">}</span></div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">5) Running and testing API Gateway</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">- Right click on Solution -> Properties then Select "Multiple Startup Projects"</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0FJ-mQBZ6eWkvQmqIFo5IaCeqGHIMkwjWibX-r3zmeIO5U53R9qL9Sl5TcdulLXSxr-YQudIXXhB7DhqoPtr6gBlGyIaE2TC4KPu0M1wUJn3LiqcF3xsW-dOrxFZpT4jMF4k53zW7zY/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="545" data-original-width="786" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0FJ-mQBZ6eWkvQmqIFo5IaCeqGHIMkwjWibX-r3zmeIO5U53R9qL9Sl5TcdulLXSxr-YQudIXXhB7DhqoPtr6gBlGyIaE2TC4KPu0M1wUJn3LiqcF3xsW-dOrxFZpT4jMF4k53zW7zY/s320/Untitled.png" width="320" /></span></a></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<br />
<br />
<br /></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">- Run the solution by pressing F5 or pressing debug</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">- Call API Gateway using Postman</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifQW8YX17mr3c9n2h-GgX03UDyCcOkB87zCFr9aQng1a1ypcXt5-aivimCO37PEpS5TgF3lSceUCXTG-gatpc43a6gNNr5GkS0OoYF_nbZ4wbc6az2fiEvp95vOOBtYS6vwRB_voJByyk/s1600/Capture2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="582" data-original-width="1131" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifQW8YX17mr3c9n2h-GgX03UDyCcOkB87zCFr9aQng1a1ypcXt5-aivimCO37PEpS5TgF3lSceUCXTG-gatpc43a6gNNr5GkS0OoYF_nbZ4wbc6az2fiEvp95vOOBtYS6vwRB_voJByyk/s320/Capture2.PNG" width="320" /></span></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRRO92hIgSKlnCDAKEJ_qAAHntqb4dwSQwrs0-VwO73XFrD1stj2NPOLu0-WVS7Jh88e5To0E-pj-LN1GIGT0fLeqeezMUtf3Emu9PkHOpRZ_tZ9pJRa56-Av_zu7H58-hECfKgw02bUY/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="593" data-original-width="1124" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRRO92hIgSKlnCDAKEJ_qAAHntqb4dwSQwrs0-VwO73XFrD1stj2NPOLu0-WVS7Jh88e5To0E-pj-LN1GIGT0fLeqeezMUtf3Emu9PkHOpRZ_tZ9pJRa56-Av_zu7H58-hECfKgw02bUY/s320/Capture.PNG" width="320" /></span></a></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<br /></div>
</div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-38297042790906529832019-12-21T21:26:00.000-08:002019-12-21T21:26:02.087-08:00Migrating EDMX to Entity Framework Core<div dir="ltr" style="text-align: left;" trbidi="on">
Hi Guys,<br />
<br />
Recently I worked on a legacy project which used EDMX to model the database layer, we had a requirement to convert it to Entity Framework Core.<br />
<br />
I followed the below video which gives the insight on how to do it cleanly.<br />
<br />
<a href="https://channel9.msdn.com/Shows/On-NET/Migrating-EDMX-projects-to-Entity-Framework-Core">https://channel9.msdn.com/Shows/On-NET/Migrating-EDMX-projects-to-Entity-Framework-Core</a><br />
<br />
Hope this helps someone.<br />
<br />
<br /></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-44770069064015104982019-09-17T04:29:00.004-07:002019-09-17T04:29:22.410-07:00Performance Monitor using ElectronJS, Flot Chart and justgauge<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Hi Guys,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">This time I made an experimental Electron JS application to monitor the CPU Usage and Memory Usage. Hope you like it.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">1) Install and Create your electron JS app using the following commands. Note : You must install nodeJS before to run these commands.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><code style="border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; line-height: inherit; margin: 0px; max-width: initial; overflow-wrap: normal; overflow: initial; padding: 0px;"><span style="font-family: Arial, Helvetica, sans-serif;">> npm i -D electron@latest</span></code></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><code style="border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; line-height: inherit; margin: 0px; max-width: initial; overflow-wrap: normal; overflow: initial; padding: 0px;"><span style="font-family: Arial, Helvetica, sans-serif;">> mkdir electronMonitor</span></code></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><span style="font-family: Arial, Helvetica, sans-serif;"><code style="border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; line-height: inherit; margin: 0px; max-width: initial; overflow-wrap: normal; overflow: initial; padding: 0px;">> cd </code>electronMonitor</span></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><code style="border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; line-height: inherit; margin: 0px; max-width: initial; overflow-wrap: normal; overflow: initial; padding: 0px;"><span style="font-family: Arial, Helvetica, sans-serif;">> npm init</span></code></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><span style="font-family: Arial, Helvetica, sans-serif;">2) Then create file index.html and paste the html</span></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px;">
<div>
<span style="color: grey;"><!</span><span style="color: #569cd6;">DOCTYPE</span> <span style="color: #9cdcfe;">html</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">html</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">head</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">meta</span> <span style="color: #9cdcfe;">charset</span>=<span style="color: #ce9178;">"UTF-8"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">title</span><span style="color: grey;">></span>Performance Monitor<span style="color: grey;"></</span><span style="color: #569cd6;">title</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">script</span> <span style="color: #9cdcfe;">src</span>=<span style="color: #ce9178;">"Styles/flot/jquery.js"</span> <span style="color: #9cdcfe;">type</span>=<span style="color: #ce9178;">"text/javascript"</span><span style="color: grey;">></span><span style="color: grey;"><</span><span style="color: grey;">/</span><span style="color: #569cd6;">script</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">link</span> <span style="color: #9cdcfe;">href</span>=<span style="color: #ce9178;">"Styles/css/bootstrap.min.css"</span> <span style="color: #9cdcfe;">rel</span>=<span style="color: #ce9178;">"stylesheet"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">script</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">script</span> <span style="color: #9cdcfe;">src</span>=<span style="color: #ce9178;">"Styles/js/justgage.js"</span> <span style="color: #9cdcfe;">type</span>=<span style="color: #ce9178;">"text/javascript"</span><span style="color: grey;">></span><span style="color: grey;"><</span><span style="color: grey;">/</span><span style="color: #569cd6;">script</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">script</span> <span style="color: #9cdcfe;">src</span>=<span style="color: #ce9178;">"Styles/js/raphael-2.1.4.min.js"</span> <span style="color: #9cdcfe;">type</span>=<span style="color: #ce9178;">"text/javascript"</span><span style="color: grey;">></span><span style="color: grey;"><</span><span style="color: grey;">/</span><span style="color: #569cd6;">script</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">script</span> <span style="color: #9cdcfe;">src</span>=<span style="color: #ce9178;">"Styles/flot/jquery.flot.js"</span> <span style="color: #9cdcfe;">type</span>=<span style="color: #ce9178;">"text/javascript"</span><span style="color: grey;">></span><span style="color: grey;"><</span><span style="color: grey;">/</span><span style="color: #569cd6;">script</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">script</span> <span style="color: #9cdcfe;">src</span>=<span style="color: #ce9178;">"./window.js"</span> <span style="color: #9cdcfe;">type</span>=<span style="color: #ce9178;">"text/javascript"</span><span style="color: grey;">></span><span style="color: grey;"><</span><span style="color: grey;">/</span><span style="color: #569cd6;">script</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">head</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">body</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"container"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">h1</span><span style="color: grey;">></span>Performance Monitor<span style="color: grey;"></</span><span style="color: #569cd6;">h1</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"row"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-12"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">h3</span><span style="color: grey;">></span>CPU Performance<span style="color: grey;"></</span><span style="color: #569cd6;">h3</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpuOverall"</span> <span style="color: #9cdcfe;">style</span>=<span style="color: #ce9178;">"</span><span style="color: #ce9178;">height: 300px; padding: 0px; position: relative;"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"row"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu1"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu2"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu3"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu4"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"row"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu5"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu6"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu7"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-3"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"cpu8"</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"200x160px"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"row"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"col-md-12"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">class</span>=<span style="color: #ce9178;">"card-body"</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">id</span>=<span style="color: #ce9178;">"memG"</span><span style="color: grey;">></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">div</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">body</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;"></</span><span style="color: #569cd6;">html</span><span style="color: grey;">></span></div>
<div>
<span style="color: grey;">
</span></div>
</div>
</pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><span style="font-family: Arial, Helvetica, sans-serif;">3) Then create main.js and paste the below javascript code</span></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px;">
<div>
<span style="color: #569cd6;">const</span> <span style="color: #9cdcfe;">electron</span> = <span style="color: #dcdcaa;">require</span>(<span style="color: #ce9178;">'electron'</span>);</div>
<div>
<span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">createWindow</span>() {</div>
<div>
<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">win</span> = <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">electron</span>.<span style="color: #4ec9b0;">BrowserWindow</span>({</div>
<div>
<span style="color: #9cdcfe;">width:</span> <span style="color: #b5cea8;">800</span>,</div>
<div>
<span style="color: #9cdcfe;">height:</span> <span style="color: #b5cea8;">600</span>,</div>
<div>
<span style="color: #9cdcfe;">webPreferences:</span> {</div>
<div>
<span style="color: #9cdcfe;">nodeIntegration:</span> <span style="color: #569cd6;">true</span></div>
<div>
}</div>
<div>
})</div>
<div>
<span style="color: #6a9955;">// and load the index.html of the app.</span></div>
<div>
<span style="color: #9cdcfe;">win</span>.<span style="color: #dcdcaa;">loadFile</span>(<span style="color: #ce9178;">'index.html'</span>);</div>
<div>
}</div>
<div>
<span style="color: #9cdcfe;">electron</span>.<span style="color: #9cdcfe;">app</span>.<span style="color: #dcdcaa;">on</span>(<span style="color: #ce9178;">'ready'</span>, <span style="color: #9cdcfe;">createWindow</span>);</div>
</div>
</pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><span style="font-family: Arial, Helvetica, sans-serif;">4) Then create window.js and paste the below javasctipt code</span></pre>
<pre class="overflow-hidden" style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 1.45; max-width: calc(100vw - 50px); overflow: hidden !important; padding: 12px; position: relative !important;"><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px;">
<div>
<span style="color: #569cd6;">const</span> <span style="color: #9cdcfe;">os</span> = <span style="color: #dcdcaa;">require</span>(<span style="color: #ce9178;">'os'</span>);</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">cpuG</span> = [];</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">memG</span> = <span style="color: #569cd6;">null</span>;</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">lastMeasureTimes</span> = [];</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">cpuOverall</span> = <span style="color: #569cd6;">null</span>;</div>
<div>
<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">total</span> = <span style="color: #b5cea8;">0</span>;</div>
<div>
<span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">setLastMeasureTimes</span>(<span style="color: #9cdcfe;">cpus</span>) {</div>
<div>
<span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">i</span> = <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> < <span style="color: #9cdcfe;">cpus</span>.<span style="color: #9cdcfe;">length</span>; <span style="color: #9cdcfe;">i</span>++) {</div>
<div>
<span style="color: #9cdcfe;">lastMeasureTimes</span>[<span style="color: #9cdcfe;">i</span>] = <span style="color: #dcdcaa;">getCpuTimes</span>(<span style="color: #9cdcfe;">cpus</span>[<span style="color: #9cdcfe;">i</span>]);</div>
<div>
}</div>
<div>
}</div>
<div>
<span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">getCpuTimes</span>(<span style="color: #9cdcfe;">cpu</span>) {</div>
<div>
<span style="color: #c586c0;">return</span> [</div>
<div>
<span style="color: #9cdcfe;">cpu</span>.<span style="color: #9cdcfe;">times</span>.<span style="color: #9cdcfe;">user</span>,</div>
<div>
<span style="color: #9cdcfe;">cpu</span>.<span style="color: #9cdcfe;">times</span>.<span style="color: #9cdcfe;">sys</span>,</div>
<div>
<span style="color: #9cdcfe;">cpu</span>.<span style="color: #9cdcfe;">times</span>.<span style="color: #9cdcfe;">idle</span>,</div>
<div>
];</div>
<div>
}</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">options</span> = {</div>
<div>
<span style="color: #9cdcfe;">colors:</span> [<span style="color: #ce9178;">"blue"</span>],</div>
<div>
<span style="color: #9cdcfe;">series:</span> {</div>
<div>
<span style="color: #9cdcfe;">shadowSize:</span> <span style="color: #b5cea8;">1</span></div>
<div>
},</div>
<div>
<span style="color: #9cdcfe;">lines:</span> {</div>
<div>
<span style="color: #9cdcfe;">show:</span> <span style="color: #569cd6;">true</span>,</div>
<div>
<span style="color: #9cdcfe;">lineWidth:</span> <span style="color: #b5cea8;">0.5</span>,</div>
<div>
<span style="color: #9cdcfe;">fill:</span> <span style="color: #569cd6;">true</span>,</div>
<div>
<span style="color: #9cdcfe;">fillColor:</span> {</div>
<div>
<span style="color: #9cdcfe;">colors:</span> [{</div>
<div>
<span style="color: #9cdcfe;">opacity:</span> <span style="color: #b5cea8;">0.1</span></div>
<div>
}, {</div>
<div>
<span style="color: #9cdcfe;">opacity:</span> <span style="color: #b5cea8;">1</span></div>
<div>
}]</div>
<div>
}</div>
<div>
},</div>
<div>
<span style="color: #9cdcfe;">yaxis:</span> {</div>
<div>
<span style="color: #9cdcfe;">min:</span> <span style="color: #b5cea8;">0</span>,</div>
<div>
<span style="color: #9cdcfe;">max:</span> <span style="color: #b5cea8;">100</span>,</div>
<div>
<span style="color: #9cdcfe;">tickColor:</span> <span style="color: #ce9178;">"#eee"</span>,</div>
<div>
<span style="color: #dcdcaa;">tickFormatter</span><span style="color: #9cdcfe;">:</span> <span style="color: #569cd6;">function</span> (<span style="color: #9cdcfe;">v</span>) {</div>
<div>
<span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">v</span> + <span style="color: #ce9178;">"%"</span>;</div>
<div>
}</div>
<div>
},</div>
<div>
<span style="color: #9cdcfe;">xaxis:</span> {</div>
<div>
<span style="color: #9cdcfe;">show:</span> <span style="color: #569cd6;">false</span>,</div>
<div>
},</div>
<div>
<span style="color: #9cdcfe;">grid:</span> {</div>
<div>
<span style="color: #9cdcfe;">tickColor:</span> <span style="color: #ce9178;">"#eee"</span>,</div>
<div>
<span style="color: #9cdcfe;">borderWidth:</span> <span style="color: #b5cea8;">0</span>,</div>
<div>
}</div>
<div>
};</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">data</span> = [];</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">totalPoints</span> = <span style="color: #b5cea8;">250</span>;</div>
<div>
<span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">getCpuData</span>(<span style="color: #9cdcfe;">val</span> = -<span style="color: #b5cea8;">1</span>) {</div>
<div>
<span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">data</span>.<span style="color: #9cdcfe;">length</span> > <span style="color: #b5cea8;">0</span>) <span style="color: #9cdcfe;">data</span> = <span style="color: #9cdcfe;">data</span>.<span style="color: #dcdcaa;">slice</span>(<span style="color: #b5cea8;">1</span>);</div>
<div>
<span style="color: #6a9955;">// do a random walk</span></div>
<div>
<span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">val</span> < <span style="color: #b5cea8;">0</span>) {</div>
<div>
<span style="color: #c586c0;">while</span> (<span style="color: #9cdcfe;">data</span>.<span style="color: #9cdcfe;">length</span> < <span style="color: #9cdcfe;">totalPoints</span>) {</div>
<div>
<span style="color: #9cdcfe;">data</span>.<span style="color: #dcdcaa;">push</span>(<span style="color: #b5cea8;">0</span>);</div>
<div>
}</div>
<div>
}</div>
<div>
<span style="color: #c586c0;">else</span></div>
<div>
<span style="color: #9cdcfe;">data</span>.<span style="color: #dcdcaa;">push</span>(<span style="color: #9cdcfe;">val</span>);</div>
<div>
<span style="color: #6a9955;">// zip the generated y values with the x values</span></div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">res</span> = [];</div>
<div>
<span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">i</span> = <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> < <span style="color: #9cdcfe;">data</span>.<span style="color: #9cdcfe;">length</span>; ++<span style="color: #9cdcfe;">i</span>) {</div>
<div>
<span style="color: #9cdcfe;">res</span>.<span style="color: #dcdcaa;">push</span>([<span style="color: #9cdcfe;">i</span>, <span style="color: #9cdcfe;">data</span>[<span style="color: #9cdcfe;">i</span>]]);</div>
<div>
}</div>
<div>
<span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">res</span>;</div>
<div>
}</div>
<div>
<span style="color: #dcdcaa;">setLastMeasureTimes</span>(<span style="color: #9cdcfe;">os</span>.<span style="color: #dcdcaa;">cpus</span>());</div>
<div>
<span style="color: #dcdcaa;">setInterval</span>(() <span style="color: #569cd6;">=></span> {</div>
<div>
<span style="color: #569cd6;">const</span> <span style="color: #9cdcfe;">cpus</span> = <span style="color: #9cdcfe;">os</span>.<span style="color: #dcdcaa;">cpus</span>();</div>
<div>
<span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">cpuOverall</span> == <span style="color: #569cd6;">null</span>) {</div>
<div>
<span style="color: #9cdcfe;">overallData</span>.<span style="color: #dcdcaa;">push</span>([<span style="color: #9cdcfe;">index</span>++, <span style="color: #b5cea8;">0</span>]);</div>
<div>
<span style="color: #9cdcfe;">cpuOverall</span> = <span style="color: #9cdcfe;">$</span>.<span style="color: #dcdcaa;">plot</span>(<span style="color: #dcdcaa;">$</span>(<span style="color: #ce9178;">"#cpuOverall"</span>), [<span style="color: #dcdcaa;">getCpuData</span>()], <span style="color: #9cdcfe;">options</span>);</div>
<div>
}</div>
<div>
<span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">i</span> = <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> < <span style="color: #9cdcfe;">cpus</span>.<span style="color: #9cdcfe;">length</span>; <span style="color: #9cdcfe;">i</span>++) {</div>
<div>
<span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">cpuG</span>[<span style="color: #9cdcfe;">i</span>] == <span style="color: #569cd6;">null</span>)</div>
<div>
<span style="color: #9cdcfe;">cpuG</span>[<span style="color: #9cdcfe;">i</span>] = <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">JustGage</span>({</div>
<div>
<span style="color: #9cdcfe;">id:</span> <span style="color: #ce9178;">"cpu"</span> + (<span style="color: #9cdcfe;">i</span> + <span style="color: #b5cea8;">1</span>),</div>
<div>
<span style="color: #9cdcfe;">value:</span> <span style="color: #b5cea8;">0</span>,</div>
<div>
<span style="color: #9cdcfe;">min:</span> <span style="color: #b5cea8;">0</span>,</div>
<div>
<span style="color: #9cdcfe;">max:</span> <span style="color: #b5cea8;">100</span>,</div>
<div>
<span style="color: #9cdcfe;">title:</span> <span style="color: #ce9178;">"CPU Core "</span> + (<span style="color: #9cdcfe;">i</span> + <span style="color: #b5cea8;">1</span>)</div>
<div>
});</div>
<div>
}</div>
<div>
<span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">memG</span> == <span style="color: #569cd6;">null</span>) {</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">initMem</span> = <span style="color: #9cdcfe;">process</span>.<span style="color: #dcdcaa;">getSystemMemoryInfo</span>();</div>
<div>
<span style="color: #9cdcfe;">memG</span> = <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">JustGage</span>({</div>
<div>
<span style="color: #9cdcfe;">id:</span> <span style="color: #ce9178;">"memG"</span>,</div>
<div>
<span style="color: #9cdcfe;">value:</span> <span style="color: #dcdcaa;">parseInt</span>(((<span style="color: #9cdcfe;">initMem</span>.<span style="color: #9cdcfe;">total</span> - <span style="color: #9cdcfe;">initMem</span>.<span style="color: #9cdcfe;">free</span>) / <span style="color: #9cdcfe;">initMem</span>.<span style="color: #9cdcfe;">total</span>) * <span style="color: #b5cea8;">100</span>),</div>
<div>
<span style="color: #9cdcfe;">min:</span> <span style="color: #b5cea8;">0</span>,</div>
<div>
<span style="color: #9cdcfe;">max:</span> <span style="color: #b5cea8;">100</span>,</div>
<div>
<span style="color: #9cdcfe;">title:</span> <span style="color: #ce9178;">"Memory Usage"</span></div>
<div>
});</div>
<div>
}</div>
<div>
<span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">initMem</span> = <span style="color: #9cdcfe;">process</span>.<span style="color: #dcdcaa;">getSystemMemoryInfo</span>();</div>
<div>
<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">usage</span> = <span style="color: #b5cea8;">0</span>;</div>
<div>
<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">overallUsage</span> = <span style="color: #b5cea8;">0</span>, <span style="color: #9cdcfe;">overallTotal</span> = <span style="color: #b5cea8;">0</span>;</div>
<div>
<span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">i</span> = <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> < <span style="color: #9cdcfe;">cpus</span>.<span style="color: #9cdcfe;">length</span>; <span style="color: #9cdcfe;">i</span>++) {</div>
<div>
<span style="color: #569cd6;">const</span> <span style="color: #9cdcfe;">cpu</span> = <span style="color: #9cdcfe;">cpus</span>[<span style="color: #9cdcfe;">i</span>];</div>
<div>
<span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">currentTimes</span> = <span style="color: #dcdcaa;">getCpuTimes</span>(<span style="color: #9cdcfe;">cpu</span>);</div>
<div>
<span style="color: #9cdcfe;">total</span> = (<span style="color: #9cdcfe;">currentTimes</span>[<span style="color: #b5cea8;">2</span>] - <span style="color: #9cdcfe;">lastMeasureTimes</span>[<span style="color: #9cdcfe;">i</span>][<span style="color: #b5cea8;">2</span>]) + (<span style="color: #9cdcfe;">currentTimes</span>[<span style="color: #b5cea8;">1</span>] - <span style="color: #9cdcfe;">lastMeasureTimes</span>[<span style="color: #9cdcfe;">i</span>][<span style="color: #b5cea8;">1</span>]) + (<span style="color: #9cdcfe;">currentTimes</span>[<span style="color: #b5cea8;">0</span>] - <span style="color: #9cdcfe;">lastMeasureTimes</span>[<span style="color: #9cdcfe;">i</span>][<span style="color: #b5cea8;">0</span>]);</div>
<div>
<span style="color: #9cdcfe;">usage</span> = (<span style="color: #9cdcfe;">currentTimes</span>[<span style="color: #b5cea8;">1</span>] - <span style="color: #9cdcfe;">lastMeasureTimes</span>[<span style="color: #9cdcfe;">i</span>][<span style="color: #b5cea8;">1</span>]) + (<span style="color: #9cdcfe;">currentTimes</span>[<span style="color: #b5cea8;">0</span>] - <span style="color: #9cdcfe;">lastMeasureTimes</span>[<span style="color: #9cdcfe;">i</span>][<span style="color: #b5cea8;">0</span>]);</div>
<div>
<span style="color: #9cdcfe;">overallUsage</span> += <span style="color: #9cdcfe;">usage</span>;</div>
<div>
<span style="color: #9cdcfe;">overallTotal</span> += <span style="color: #9cdcfe;">total</span>;</div>
<div>
<span style="color: #9cdcfe;">cpuG</span>[<span style="color: #9cdcfe;">i</span>].<span style="color: #dcdcaa;">refresh</span>((<span style="color: #9cdcfe;">usage</span> / <span style="color: #9cdcfe;">total</span>) * <span style="color: #b5cea8;">100</span>);</div>
<div>
}</div>
<div>
<span style="color: #9cdcfe;">cpuOverall</span>.<span style="color: #dcdcaa;">setData</span>([<span style="color: #dcdcaa;">getCpuData</span>(<span style="color: #dcdcaa;">parseInt</span>((<span style="color: #9cdcfe;">overallUsage</span> / <span style="color: #9cdcfe;">overallTotal</span>) * <span style="color: #b5cea8;">100</span>))]);</div>
<div>
<span style="color: #9cdcfe;">cpuOverall</span>.<span style="color: #dcdcaa;">draw</span>();</div>
<div>
<span style="color: #9cdcfe;">memG</span>.<span style="color: #dcdcaa;">refresh</span>(<span style="color: #dcdcaa;">parseInt</span>(((<span style="color: #9cdcfe;">initMem</span>.<span style="color: #9cdcfe;">total</span> - <span style="color: #9cdcfe;">initMem</span>.<span style="color: #9cdcfe;">free</span>) / <span style="color: #9cdcfe;">initMem</span>.<span style="color: #9cdcfe;">total</span>) * <span style="color: #b5cea8;">100</span>));</div>
<div>
<span style="color: #dcdcaa;">setLastMeasureTimes</span>(<span style="color: #9cdcfe;">cpus</span>);</div>
<div>
}, <span style="color: #b5cea8;">1000</span>);</div>
</div>
<div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px;">
</div>
<div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0UFO7kIi3qY4tMSVNn6wcpweTITBiXzXElc78THGu-5bn3MJZfsfmJv3O86FGdMlWz-mpcXfg5YJWg1Fb9a8DL0It3CcKsYu7lireUmgjIOV76TmvMJlGGMluwK25-zr8JYRGDKKhDIA/s1600/Capture.PNG" imageanchor="1" style="background-color: transparent; clear: left; display: inline !important; float: left; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; margin-bottom: 1em; margin-right: 1em; text-align: center;">
</a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0UFO7kIi3qY4tMSVNn6wcpweTITBiXzXElc78THGu-5bn3MJZfsfmJv3O86FGdMlWz-mpcXfg5YJWg1Fb9a8DL0It3CcKsYu7lireUmgjIOV76TmvMJlGGMluwK25-zr8JYRGDKKhDIA/s1600/Capture.PNG" imageanchor="1" style="background-color: transparent; clear: left; display: inline !important; float: left; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; margin-bottom: 1em; margin-right: 1em; text-align: center;">
</a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0UFO7kIi3qY4tMSVNn6wcpweTITBiXzXElc78THGu-5bn3MJZfsfmJv3O86FGdMlWz-mpcXfg5YJWg1Fb9a8DL0It3CcKsYu7lireUmgjIOV76TmvMJlGGMluwK25-zr8JYRGDKKhDIA/s1600/Capture.PNG" imageanchor="1" style="background-color: transparent; clear: left; display: inline !important; float: left; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="879" data-original-width="1600" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0UFO7kIi3qY4tMSVNn6wcpweTITBiXzXElc78THGu-5bn3MJZfsfmJv3O86FGdMlWz-mpcXfg5YJWg1Fb9a8DL0It3CcKsYu7lireUmgjIOV76TmvMJlGGMluwK25-zr8JYRGDKKhDIA/s320/Capture.PNG" width="320" /></a></div>
</pre>
</div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-17365703974520955732019-04-30T23:45:00.000-07:002019-04-30T23:45:01.976-07:00Application Pool consuming High Memory<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="MsoNormal">
<span style="font-family: Arial, Helvetica, sans-serif;">Hi Guys,<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: Arial, Helvetica, sans-serif;">One of the web application which was in a production environment in my organization suddenly started consuming high memory and eventually freeze.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: Arial, Helvetica, sans-serif;">After spending some time troubleshooting code I couldn’t
find any issue. Finally I found that it was just a simple web.config settings
you and me always tend to ignore.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="background: white;">
<span style="color: black; font-size: 11.5pt;"><span style="font-family: Arial, Helvetica, sans-serif;"><compilation <br />
…<br />
debug="true"<br />
/> <o:p></o:p></span></span></div>
<div class="MsoNormal" style="background: white;">
<span style="color: black; font-size: 11.5pt;"><span style="font-family: Arial, Helvetica, sans-serif;"><trace<br />
enabled="true"<br />
…<br />
/><o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="color: red;"><span style="font-family: Arial, Helvetica, sans-serif;">Note : when we debug using visual
studio the above values are needed for debugging but when you finally move your
application to production, make sure the both of these values are set to “<b>false</b>”</span><o:p></o:p></span></div>
<br /></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-87756344432728631312018-06-02T05:28:00.002-07:002018-06-02T05:28:54.810-07:00Sharepoint SPFx CRUD operations on Lists using Angular<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>1) Introduction</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="background-color: white; color: #222222;">This article is going to describe how set up the Sharepoint online in Office 365 and do CRUD operations on a List using Angular.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">The source code for this is available at <a href="https://github.com/shahimsadakath/spfx-crud-sample">https://github.com/shahimsadakath/spfx-crud-sample</a><br /></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">Let's get started.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>2) Setting up the Sharepoint Online Account</b></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">You can visit <a href="https://docs.microsoft.com/en-us/office/developer-program/office-365-developer-program">Office 365 Developer program</a> and register yourself for free developer subscription for one whole year. Remember to select "<b>Sharepoint</b>" as one of the products you want to develop.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">Once you can registered you can use your credentials to login to Sharepoint development site in my case it is https://shadotnet.sharepoint.com.</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b>3) Creating a List to perform CRUD operations</b></span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b><br /></b></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">1. Click on settings icon on top right hand corner select "Add an app"</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b><br /></b></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHflLZtyjjPoK5l8R42IfjysT4RKjPyFc8aQ8DQhJCMBMXD1ehfrCp56Iadr_cv9MBNMrkpUuZIuaXAVG0M0IQ87CIrJ_-hi-vb8IsU3LivQkbi6wYvD7IMPdiy2ABmmY4iFDkRMfoHRA/s1600/1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="415" data-original-width="1294" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHflLZtyjjPoK5l8R42IfjysT4RKjPyFc8aQ8DQhJCMBMXD1ehfrCp56Iadr_cv9MBNMrkpUuZIuaXAVG0M0IQ87CIrJ_-hi-vb8IsU3LivQkbi6wYvD7IMPdiy2ABmmY4iFDkRMfoHRA/s320/1.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">2. Select Custom List from the options</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhod5vHquCp-99uixKygYgHID6vxB-ckjL8zl9Rv9Uo0QRPggLpOjBxen-eT9HA2dt3_VW5nXnp6umqFf5RK9L5crHqDdCyH3-R37btowhFHko89XK-WdCnv3vvEiE3E6JtdAUXDKWRU3c/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="520" data-original-width="1064" height="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhod5vHquCp-99uixKygYgHID6vxB-ckjL8zl9Rv9Uo0QRPggLpOjBxen-eT9HA2dt3_VW5nXnp6umqFf5RK9L5crHqDdCyH3-R37btowhFHko89XK-WdCnv3vvEiE3E6JtdAUXDKWRU3c/s320/2.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">3. Give a name for your List. Remember this name will be used when we access the List from our SPFx webpart.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyDYUUq8tqjurGJi8isdqsAQrR7baS2b8LHV9Tdcw1QhQ5psKgtBP89Fr2G6geCsKmE0mkgy_0prLW_2aVLh1zaXJcEHr8G2kTku7pf2DuXWANoC3e8dmQdqvP-EYnR9ZGS-SIdG5JjDc/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="519" data-original-width="1173" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyDYUUq8tqjurGJi8isdqsAQrR7baS2b8LHV9Tdcw1QhQ5psKgtBP89Fr2G6geCsKmE0mkgy_0prLW_2aVLh1zaXJcEHr8G2kTku7pf2DuXWANoC3e8dmQdqvP-EYnR9ZGS-SIdG5JjDc/s320/3.PNG" width="320" /></a></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">4. Then Click on Settings of the Created List</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinZ7UiE20VYGbuOKeaFn9Q4sOOjRxWNf6PXFwiE_3UOvG8pTY7T7ly-pAH2elW5D6UJjqdnFe3bnWs_gmnWVElWa1DT2kxoaY_d0XpdD5T7JLaeV2bTH6bsmc9A1KLZ4WiAstge7N_EPU/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="693" data-original-width="1268" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinZ7UiE20VYGbuOKeaFn9Q4sOOjRxWNf6PXFwiE_3UOvG8pTY7T7ly-pAH2elW5D6UJjqdnFe3bnWs_gmnWVElWa1DT2kxoaY_d0XpdD5T7JLaeV2bTH6bsmc9A1KLZ4WiAstge7N_EPU/s320/4.PNG" width="320" /></a></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">5. Add Columns as shown below by clicking "Create Column"</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaRyNmXTxHsIpM8n2i_dc0UXOzjjxgTWmlKh1-dseXCbpJM2qUaXcSIthDqGuCmRMOR_F7y8P6CDrF0dQ8qS1nUekXgoaAuNK-Tk_MxZ07xkgO-0hch0x4diop_5v-OQ-ayujRddkmY6Q/s1600/5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="572" data-original-width="1138" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaRyNmXTxHsIpM8n2i_dc0UXOzjjxgTWmlKh1-dseXCbpJM2qUaXcSIthDqGuCmRMOR_F7y8P6CDrF0dQ8qS1nUekXgoaAuNK-Tk_MxZ07xkgO-0hch0x4diop_5v-OQ-ayujRddkmY6Q/s320/5.PNG" width="320" /></a></div>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>4) I</b></span></span><b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">ntegrate the Sharepoint List to SPFx Webpart</b><br />
<b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></b>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 1. Modify App.Settings.ts as shown below</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">export class AppSettings {</span><span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public static SP_URL = "<b>{YOUR_SHAREPOINT_ONLINE_URL}</b>";</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public static SP_LISTNAME = "<b>{NAME_OF_SP_LIST}</b>";</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public static GMAP_URL = "https://maps.google.com/maps/api/js?key={YOURKEY}";</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public static JQUERY_URL = "https://code.jquery.com/jquery-3.3.1.min.js";</span><br />
<br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">2. Create service </span><span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">SPFxService</span><span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> as shownbelow</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import { Injectable } from '@angular/core';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import { HttpClient,HttpParams,HttpHeaders } from '@angular/common/http'</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import { AppSettings } from '../app.settings';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import { Observable } from 'rxjs';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import 'rxjs/add/operator/map';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import 'rxjs/add/operator/toPromise'</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import { observableToBeFn } from 'rxjs/testing/TestScheduler';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">import {IRequestDigest,IListItemEntityType,IHttpPromiseCallbackArg} from '../app.common';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">@Injectable()</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">export class SPFxService {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public currentItem:any;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> listItemEntityTypeName: string = '';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> formDigestValue:string = '';</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> constructor(private http: HttpClient) { </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public readItems(): Observable<any> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const headers = new HttpHeaders().set('accept','application/json;odata=nometadata');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> };</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return this.http.get(`${AppSettings.SP_URL}/_api/web/lists/getbytitle('${AppSettings.SP_LISTNAME}')/items`, requestOptions</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> );</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> private getRequestDigest() : Promise<IRequestDigest> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">let promise = new Promise<IRequestDigest>((resolve,reject)=>{</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const headers = new HttpHeaders().set('accept','application/json;odata=nometadata');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> };</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.http.post(AppSettings.SP_URL + '/_api/contextinfo','',requestOptions)</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .toPromise().then((res:IRequestDigest) => { this.formDigestValue = res.FormDigestValue; resolve(); });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">});</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return promise;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public getListItemEntityTypeName() : Promise<IListItemEntityType> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let promise = new Promise<IListItemEntityType>((resolve,reject)=>{</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const headers = new HttpHeaders().set('accept','application/json;odata=nometadata');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> };</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.http.get(`${AppSettings.SP_URL}/_api/web/lists/getbytitle('${AppSettings.SP_LISTNAME}')?$select=ListItemEntityTypeFullName`</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> ,requestOptions</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> ).toPromise().then((res : IListItemEntityType)=>{ this.listItemEntityTypeName = res.ListItemEntityTypeFullName; resolve(); } );</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return promise;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">public createItem(title: string, description: string, latitude: string,longitude:string) : Promise<any> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let promise = new Promise<IRequestDigest>((resolve,reject)=>{</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.getListItemEntityTypeName()</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .then((res) => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return this.getRequestDigest();</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }) </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .then((res) => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let headers = new HttpHeaders().set('accept','application/json;odata=nometadata');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('Content-type','application/json;odata=verbose');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('X-RequestDigest',this.formDigestValue);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> };</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const body: string = JSON.stringify({</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> '__metadata': {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'type': this.listItemEntityTypeName</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> },</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Title': title,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Description' : description,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Latitude' : latitude,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Longitude':longitude</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.http.post(`${AppSettings.SP_URL}/_api/web/lists/getbytitle('${AppSettings.SP_LISTNAME}')/items`, </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> body,requestOptions).toPromise().then(res=>{ resolve();});</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return promise;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public readItem(id: number): Promise<any> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let promise = new Promise<IRequestDigest>((resolve,reject)=> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let headers = new HttpHeaders().set('accept','application/json');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">};</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.http.get(`${AppSettings.SP_URL}/_api/web/lists/getbytitle('${AppSettings.SP_LISTNAME}')/items(${id})`,requestOptions</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> ).toPromise()</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .then((response) => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.currentItem = response;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> resolve();</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }, (error: any): void => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> reject(error);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return promise;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public updateItem(id: number, title: string, description: string, latitude: string,longitude:string): Promise<any> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let promise = new Promise<IRequestDigest>((resolve,reject)=>{</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let listItemEntityTypeName: string = undefined;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.getListItemEntityTypeName()</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .then((res) => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return this.getRequestDigest();</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> })</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .then((res) => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let headers = new HttpHeaders().set('accept','application/json;odata=nometadata');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('Content-type','application/json;odata=verbose');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('X-RequestDigest',this.formDigestValue);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('X-HTTP-Method', 'MERGE');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('IF-MATCH', this.currentItem["odata.etag"]);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> };</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const body: string = JSON.stringify({</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> '__metadata': {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'type': this.listItemEntityTypeName</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> },</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Title': title,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Description' : description,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Latitude' : latitude,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Longitude':longitude</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.http.post(`${AppSettings.SP_URL}/_api/web/lists/getbytitle('${AppSettings.SP_LISTNAME}')/items(${id})?@target='${AppSettings.SP_URL}'`, </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> body,requestOptions).toPromise().then(res=>{ this.currentItem = null; resolve();});</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return promise;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> public deleteItem(id:number): Promise<any> {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let promise = new Promise<any>((resolve,reject)=>{</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> this.getRequestDigest()</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> .then((res) => {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> console.log(this.formDigestValue);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> let headers = new HttpHeaders().set('accept','application/json;odata=nometadata');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('Content-type','application/json;odata=verbose');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('X-RequestDigest',this.formDigestValue);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('X-HTTP-Method', 'DELETE');</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers = headers.set('IF-MATCH', this.currentItem["odata.etag"]);</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const requestOptions = {</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> headers: headers</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> };</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> const body: string = JSON.stringify({</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> 'Id': id</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return this.http.post(`${AppSettings.SP_URL}/_api/web/lists/getbytitle('${AppSettings.SP_LISTNAME}')/items(${id})`,body,</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> requestOptions).toPromise().then(res=>{ this.currentItem = null; resolve();});</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> });</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> return promise;</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> }</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"> </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"></span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">}</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b>5) Demo</b></span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b><br /></b></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">1. Read operation and Create operation </span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">Since no data available map shows empty</span><br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b><br /></b></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLmIKfHboQkgIqgUlhEjZ2FqZKO9p2UPN9u_V3Rue9AhCsHu2yrv3F5VCHeQ4vFlUXvoMCzkFyP8kL3UHErexh1sqFOcva-yxYJ_T2NPO4xueuMyRfjg8ej0FdRF3jNzxsIvYxT73QVQ/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="697" data-original-width="1290" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLmIKfHboQkgIqgUlhEjZ2FqZKO9p2UPN9u_V3Rue9AhCsHu2yrv3F5VCHeQ4vFlUXvoMCzkFyP8kL3UHErexh1sqFOcva-yxYJ_T2NPO4xueuMyRfjg8ej0FdRF3jNzxsIvYxT73QVQ/s320/6.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">so we will click on Add New Location and add a Location as shown below</span><br />
<b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></b>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3woKbrSOFx7znMB2xpEgKfD_HEhi1Qz4c9F0OUf5Sr_IRXTMtFD2Cn8f1Vq7bUIrPMG0zjRKMuIVh1Zp9cEzKnhQdZWjsawYAzvdu9nrrvkHxBGXTm4Zwyc6e0csnjZiwj_9v1UWpGkc/s1600/7.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="645" data-original-width="1366" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3woKbrSOFx7znMB2xpEgKfD_HEhi1Qz4c9F0OUf5Sr_IRXTMtFD2Cn8f1Vq7bUIrPMG0zjRKMuIVh1Zp9cEzKnhQdZWjsawYAzvdu9nrrvkHxBGXTm4Zwyc6e0csnjZiwj_9v1UWpGkc/s320/7.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Now when we look at our Sharepoint List we can see that the Location has been successfully added.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiodNOU0j9ct6Y7EOLwR-b9ivoYdiwXy_Ie-idid81BG0kjKSthgCkUCtZImNhaqpGP9bj-3_9SXNheEp2K-0vi1vGcAESKBB7uqwrBtcMuvb0Wi-m6iKpOOSUyXcjAMKaXfoBiRtXisfE/s1600/8.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="483" data-original-width="1289" height="119" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiodNOU0j9ct6Y7EOLwR-b9ivoYdiwXy_Ie-idid81BG0kjKSthgCkUCtZImNhaqpGP9bj-3_9SXNheEp2K-0vi1vGcAESKBB7uqwrBtcMuvb0Wi-m6iKpOOSUyXcjAMKaXfoBiRtXisfE/s320/8.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">2. Update Operation</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">We will click on Edit Button</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ2HAI7xgxNmEzuRkjXm_ZQfBqRxNSCPjOr3TCx1fDNiSavfVNau4QJmlxjCkJn-ggDNbi_rViKfI3tb7xuFPrBpkOktesT66FZf46fUOl-_8rgglmrzAwyVpzfotj9sEt9H_z1Ea7dR4/s1600/9.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="689" data-original-width="1359" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ2HAI7xgxNmEzuRkjXm_ZQfBqRxNSCPjOr3TCx1fDNiSavfVNau4QJmlxjCkJn-ggDNbi_rViKfI3tb7xuFPrBpkOktesT66FZf46fUOl-_8rgglmrzAwyVpzfotj9sEt9H_z1Ea7dR4/s320/9.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Make some modifications as shown below.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVsCqFzsTDOgs5PW-qdKvl8uJVReU3TI5jjKJ0bgvILufP-9PrXChvZXMxtw9uzjJoIvscH0Q5tLeDX_uIKY8iGdeAietLNB-gjQFyAyJ3mh6aR2Pd_IZYWihul9So82742yc1gE8hlHk/s1600/11.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="641" data-original-width="1275" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVsCqFzsTDOgs5PW-qdKvl8uJVReU3TI5jjKJ0bgvILufP-9PrXChvZXMxtw9uzjJoIvscH0Q5tLeDX_uIKY8iGdeAietLNB-gjQFyAyJ3mh6aR2Pd_IZYWihul9So82742yc1gE8hlHk/s320/11.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Now when we look at our Sharepoint List we can see that the Location has been successfully updated.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLQQHj_v-_DIa1p8MbTS8idNLuQTiFy61zVcw-SpY0vt9pK1shlVEwr3MMsfPfuMvEoMADvlhg4WEq5nqIoJjfv3TYnBKN-RbDJzYJBJzrpFopNSRm4WYtpIRa4FZO8AmiWYE7OE94Mfs/s1600/12.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="536" data-original-width="1288" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLQQHj_v-_DIa1p8MbTS8idNLuQTiFy61zVcw-SpY0vt9pK1shlVEwr3MMsfPfuMvEoMADvlhg4WEq5nqIoJjfv3TYnBKN-RbDJzYJBJzrpFopNSRm4WYtpIRa4FZO8AmiWYE7OE94Mfs/s320/12.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">3. Delete Operation</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">For the demo purpose I added another Location. </span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhdbY4coH9_IQA2mMvbZNCDD5DKogoK-BOxv7O5v62ZBcvPAzukcYCxErMEc-EyXRDU2kEj4dldfV8EnjEo_q_sg6v6ngVsnMIfSNYL6BIPL9s1QznYmXccdPNQV5SJYiiyH3nY1B4j-k/s1600/13.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="694" data-original-width="1287" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhdbY4coH9_IQA2mMvbZNCDD5DKogoK-BOxv7O5v62ZBcvPAzukcYCxErMEc-EyXRDU2kEj4dldfV8EnjEo_q_sg6v6ngVsnMIfSNYL6BIPL9s1QznYmXccdPNQV5SJYiiyH3nY1B4j-k/s320/13.PNG" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Now when click on delete button we can see the Location as been successfully deleted</span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9QvmbE5vKcn5LdnvG1887Gt1gbxl3Se5ghuj7mslQ1ZSaG8e5MXaRTJkwyGyh2zhKnqzSHUyWTVzkDm9JlSji5aiB1Sb_8AEBfVMxZAVwRSSNTrXQ4Al14pJ7F82uow5rm2wnQxRG1ZI/s1600/14.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="559" data-original-width="1203" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9QvmbE5vKcn5LdnvG1887Gt1gbxl3Se5ghuj7mslQ1ZSaG8e5MXaRTJkwyGyh2zhKnqzSHUyWTVzkDm9JlSji5aiB1Sb_8AEBfVMxZAVwRSSNTrXQ4Al14pJ7F82uow5rm2wnQxRG1ZI/s320/14.PNG" width="320" /></a></div>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b><br /></b></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></span>
<br /></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-81330395792676260462018-05-24T16:09:00.000-07:002018-05-24T16:16:58.600-07:00Google Map in Sharepoint SPFx with Angular <div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>1) Introduction</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="background-color: white; color: #222222;">This article is going to describe how to set up S</span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">harepoint Framework (SPFx) Development with Angular using a template project created by Sahil Malik which is available at <a href="https://github.com/maliksahil/SPFxAngularCLI">https://github.com/maliksahil/SPFxAngularCLI</a><br /><br />I modified Sahil's work, integrated Google Map API and Goodzer API to an Angular Sharepoint SPFx web part. The modified code is available at <a href="https://github.com/shahimsadakath/spfx-google-map-sample">https://github.com/shahimsadakath/spfx-google-map-sample</a></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">If you are new to Sharepoint SPFx and you haven't set up your development environment yet. My previous article at <a href="http://shadotnet.blogspot.com/2018/05/starting-sharepoint-framework-spfx.html">http://shadotnet.blogspot.com/2018/05/starting-sharepoint-framework-spfx.html</a> will be useful.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">Let's get started.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>2) Steps to integrate Goodzer API</b></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b><br /></b></span></span>
<br />
<ol style="text-align: left;">
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Register yourself at</span> <a href="https://developer.goodzer.com/signup/" style="font-family: arial, tahoma, helvetica, freesans, sans-serif; font-weight: bold;">https://developer.goodzer.com/signup/</a><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> and get a free API Key </span></li>
<li><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">I added a file named </span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>app.settings.ts</b> to store the API Key as shown below in src->app folder</span></li>
</ol>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">export class AppSettings {</span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> </span><br />
<ol style="text-align: left;"></ol>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> public static GOODZER_API_ENDPOINT='https://api.goodzer.com/products/v0.1/';</span><br />
<ol style="text-align: left;"></ol>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> public static GOODZER_API_KEY ='{your_API_Key}';</span><br />
<ol style="text-align: left;"></ol>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> public static GMAP_URL = "https://maps.google.com/maps/api/js?key=</span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">{your_API_Key}</span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">";</span><br />
<ol style="text-align: left;"></ol>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> </span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> }</span><br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span>
<br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"> 3. I added <b>goodzer.service.ts </b>in src -> services to access the Goodzer API as shown below</span></div>
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"></span><br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">import { Injectable } from '@angular/core';</span></div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">
</span>
<br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">import {Http,Headers,RequestOptions, Response } from '@angular/http';</span></div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">
</span>
<br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">import { AppSettings } from '../app.settings';</span></div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">
</span>
<br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">import { Observable } from 'rxjs';</span></div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">
</span>
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">import 'rxjs/add/operator/map'</span></div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">
<div>
<br /></div>
<div>
@Injectable()</div>
<div>
export class GoodzerService {</div>
<div>
constructor(private http: Http) { </div>
<div>
</div>
<div>
}</div>
<div>
<br /></div>
<div>
searchLocations(searchText:string,latitude:string,longitude:string) : Observable<any></div>
<div>
{</div>
<div>
let headers: Headers = new Headers();</div>
<div>
headers.append('Accept', 'application/json');</div>
<div>
headers.append('Content-Type', 'application/json');</div>
<div>
headers.append('Access-Control-Allow-Origin', '*');</div>
<div>
<br /></div>
<div>
let options = new RequestOptions({</div>
<div>
headers: headers</div>
<div>
});</div>
<div>
<br /></div>
<div>
</div>
<div>
</div>
<div>
return this.http.get(AppSettings.GOODZER_API_ENDPOINT</div>
<div>
+'/search_locations/?query='+</div>
<div>
searchText+</div>
<div>
'&lat='+latitude+'&lng='+longitude+'&radius=5.0&apiKey='+AppSettings.GOODZER_API_KEY,options)</div>
<div>
.map((response: Response) => {</div>
<div>
//console.log(response);</div>
<div>
return response.json();</div>
<div>
}).catch(this.handleError);</div>
<div>
}</div>
<div>
<br /></div>
<div>
searchStores(searchText:string,latitude:string,longitude:string) : Observable<any></div>
<div>
{</div>
<div>
let headers: Headers = new Headers();</div>
<div>
headers.append('Accept', 'application/json');</div>
<div>
headers.append('Content-Type', 'application/json');</div>
<div>
headers.append('Access-Control-Allow-Origin', '*');</div>
<div>
<br /></div>
<div>
let options = new RequestOptions({</div>
<div>
headers: headers</div>
<div>
});</div>
<div>
<br /></div>
<div>
</div>
<div>
</div>
<div>
return this.http.get(AppSettings.GOODZER_API_ENDPOINT</div>
<div>
+'/search_stores/?query='+</div>
<div>
searchText+</div>
<div>
'&lat='+latitude+'&lng='+longitude+'&radius=5.0&apiKey='+AppSettings.GOODZER_API_KEY,options)</div>
<div>
.map((response: Response) => {</div>
<div>
</div>
<div>
return response.json();</div>
<div>
}).catch(this.handleError);</div>
<div>
}</div>
<div>
<br /></div>
<div>
searchInStores(searchText:string,storeId:string) : Observable<any></div>
<div>
{</div>
<div>
let headers: Headers = new Headers();</div>
<div>
headers.append('Accept', 'application/json');</div>
<div>
headers.append('Content-Type', 'application/json');</div>
<div>
headers.append('Access-Control-Allow-Origin', '*');</div>
<div>
<br /></div>
<div>
let options = new RequestOptions({</div>
<div>
headers: headers</div>
<div>
});</div>
<div>
<br /></div>
<div>
</div>
<div>
</div>
<div>
return this.http.get(AppSettings.GOODZER_API_ENDPOINT</div>
<div>
+'/search_in_store/?query='+</div>
<div>
searchText+</div>
<div>
'&storeId='+storeId+'&apiKey='+AppSettings.GOODZER_API_KEY,options)</div>
<div>
.map((response: Response) => {</div>
<div>
console.log(response);</div>
<div>
return response.json();</div>
<div>
}).catch(this.handleError);</div>
<div>
}</div>
<div>
<br /></div>
<div>
private handleError (error: Response | any) {</div>
<div>
// In a real world app, we might use a remote logging infrastructure</div>
<div>
let errMsg: string;</div>
<div>
if (error instanceof Response) {</div>
<div>
const body = error.json() || '';</div>
<div>
const err = body.error || JSON.stringify(body);</div>
<div>
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;</div>
<div>
}else {</div>
<div>
errMsg = error.message ? error.message : error.toString();</div>
<div>
}</div>
<div>
//console.log(error);</div>
<div>
return Observable.throw(errMsg);</div>
<div>
}</div>
<div>
<br /></div>
<div>
}</div>
<div>
<br /></div>
<div>
<b>3) Steps to integrate Google Maps API</b></div>
</span><br />
<div>
<span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div>
<ol style="text-align: left;">
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Register yourself at <a href="https://developers.google.com/maps/documentation/javascript/get-api-key">https://developers.google.com/maps/documentation/javascript/get-api-key</a> and get an API key</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Replace the GMAP_URL within <b>app.settings.ts</b> with the API Key</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Add the following method to <b>app.component.ts</b> to inject the scripts required generate map and call method in the constructor</span></li>
</ol>
<span style="font-family: "arial" , "helvetica" , sans-serif;">addMapsScript() {</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> if (!document.querySelectorAll(`[src="${AppSettings.GMAP_URL}"]`).length) { </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> document.body.appendChild(Object.assign(</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> document.createElement('script'), {</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> type: 'text/javascript',</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> src: AppSettings.GMAP_URL,</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> onload: () => this.doMapInitLogic()</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> }));</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> } else {</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> this.doMapInitLogic();</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><br />
<ol style="text-align: left;">
</ol>
<b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">4) Demo</b><br />
<b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></b>
<br />
<ol style="text-align: left;">
<li><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">Go to the folder of the project (E:\Software\Sharepoint\SPFxAngular\SPFxAngular in my case) from windows command prompt</span></li>
<li><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">Type "<b>gulp serve</b>" and hit enter</span></li>
<li><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">Add the Web Part to the Sharepoint workbench</span></li>
<li><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">By default the map will Load the GPS Coordinates of New York as shown below</span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpGcqT7Fp3k9hpUeucUyG56aEm3gZbJaBXvqj5rMEgERMeHdHOD-rnOreD5bJNAMTIF-qF1qfoTboDXt2jX1IhectY8pmlZ3MdnmXYpA306lNHHs8QSgh7rnJmbf09KnSjyugIp4mgi30/s1600/1.png" imageanchor="1" style="clear: left; display: inline !important; font-family: arial, tahoma, helvetica, freesans, sans-serif; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="726" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpGcqT7Fp3k9hpUeucUyG56aEm3gZbJaBXvqj5rMEgERMeHdHOD-rnOreD5bJNAMTIF-qF1qfoTboDXt2jX1IhectY8pmlZ3MdnmXYpA306lNHHs8QSgh7rnJmbf09KnSjyugIp4mgi30/s320/1.png" width="320" /></a></li>
</ol>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">5. But you can Edit the web part as shown below and change the coordinates to any city within United States, I changed it to Chicago.</span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1-0VLn4ISHgyDZrmrB-LgjUsmgF2g7Phb_40nDZAtZ8R_5wClz81oNfZwhYZG9VUQNj7mgpfzFlJ3PR3k4Yi1mxGtXBw37SEfwLIxcO6BN8lNr-qOG4-Sru8vkrdFQwYVLcUHFtDKC04/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="674" data-original-width="1366" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1-0VLn4ISHgyDZrmrB-LgjUsmgF2g7Phb_40nDZAtZ8R_5wClz81oNfZwhYZG9VUQNj7mgpfzFlJ3PR3k4Yi1mxGtXBw37SEfwLIxcO6BN8lNr-qOG4-Sru8vkrdFQwYVLcUHFtDKC04/s320/2.PNG" width="320" /></a></div>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /><br /><br /><br />6. Then reload the page now you will see that city Chicago as below</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIQOsS7K13_Dudesdlh9Nm_alZ-qn_kjvoacoN5hn8L9sri1eepahqOdT79_St6iCVJySePnm5GdCKMmwuE37OY6kJKzRFh7rHeRCzxXuS4TrUj_Y_WyqWu3dKYvhiCJK89KrXZarq2D4/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="718" data-original-width="1366" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIQOsS7K13_Dudesdlh9Nm_alZ-qn_kjvoacoN5hn8L9sri1eepahqOdT79_St6iCVJySePnm5GdCKMmwuE37OY6kJKzRFh7rHeRCzxXuS4TrUj_Y_WyqWu3dKYvhiCJK89KrXZarq2D4/s320/3.PNG" width="320" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">7. Type any product in Search Bar and Press Search button, it will call the Goodzer API to find the shops having the product you searched for and mark them on the map.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWkGlY_DvwJ1ZkGad7WX2nvlPFcxsHouBmv49pubGON5AMnIj-a1Db7D00f74ycn1qT6yUDakR0bYN7Ngtd85DJu4d19IkUttG-tFpTKy8u2tOSsXhCf_zpGYOt0co7BCJ-5IsxfOl26E/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="725" data-original-width="1364" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWkGlY_DvwJ1ZkGad7WX2nvlPFcxsHouBmv49pubGON5AMnIj-a1Db7D00f74ycn1qT6yUDakR0bYN7Ngtd85DJu4d19IkUttG-tFpTKy8u2tOSsXhCf_zpGYOt0co7BCJ-5IsxfOl26E/s320/4.PNG" width="320" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWkGlY_DvwJ1ZkGad7WX2nvlPFcxsHouBmv49pubGON5AMnIj-a1Db7D00f74ycn1qT6yUDakR0bYN7Ngtd85DJu4d19IkUttG-tFpTKy8u2tOSsXhCf_zpGYOt0co7BCJ-5IsxfOl26E/s1600/4.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"> </a><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
</div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">8. You can click on any shop and Get the direction by clicking "Get Directions" button as shown below</span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKIoMATHCJXdfVJ4LvyfrzCNTATSR92eh5rDu5y9E9Ai24_wNhrS8UnH_59LVu2ox74uiClndJt9CMXdz6jGJZEaztvTQTpRuyUseLTJDEVORiyb9qO6_WlXAf3tMHWKIIP6sIIIq9Ozk/s1600/5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="726" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKIoMATHCJXdfVJ4LvyfrzCNTATSR92eh5rDu5y9E9Ai24_wNhrS8UnH_59LVu2ox74uiClndJt9CMXdz6jGJZEaztvTQTpRuyUseLTJDEVORiyb9qO6_WlXAf3tMHWKIIP6sIIIq9Ozk/s320/5.PNG" width="320" /></a></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;">5) References and Further Reading</b></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b style="color: #222222; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><br /></b></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">https://docs.microsoft.com/en-us/sharepoint/dev/spfx/sharepoint-framework-overview</span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">https://developer.goodzer.com/docs/</span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">https://developers.google.com/maps/documentation/javascript/tutorial</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">https://www.youtube.com/watch?v=_OgEqWtouuU</span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></span></div>
</div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-10033171453732368742018-05-19T05:02:00.000-07:002018-05-24T15:13:46.017-07:00Starting Sharepoint Framework (SPFx) Development Environment in your PC<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>1) Introduction</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="background-color: white; color: #222222;">This article is going to describe how to set up S</span><span style="color: #222222; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">harepoint Framework (SPFx) Development Environment locally in your PC</span><span style="background-color: white; color: #222222;">. Before you start you must have a little bit knowledge or understanding of following technologies/tools,</span></span><br />
<ul style="text-align: left;">
<li><span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif;"><span style="background-color: white;">Sharepoint 2016 or greater (Which supports </span>SPFx)</span></li>
<li><span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif;">Node.js</span></li>
<li><span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif;">Npm</span></li>
<li><span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif;">Typescript</span></li>
<li><span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif;">Visual Studio Code</span></li>
</ul>
<div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>2) What is Sharepoint Framework (SPFx)</b></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="background-color: white;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The SharePoint Framework (SPFx) is a page and web part model that provides full support for client-side SharePoint development, easy integration with SharePoint data, and support for open source tooling. With the SharePoint Framework, you can use modern web technologies and tools in your preferred development environment to build productive experiences and apps that are responsive and mobile-ready from day one. The SharePoint Framework works for SharePoint Online and soon also for on-premises (SharePoint 2016 Feature Pack 2)</span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>3) Why we should use Sharepoint Framework?</b></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">As I personally believe javascript frameworks these days are very matured, secure and high in performance. Most of the cloud based API's can be easily consumed by REST calls. Which increases the need javascript calls from our Sharepoint solutions as well. And with the introduction of Typescript, now developers can write and manage javascript codes pretty easily. And it eliminates the issues of javascript injection (Script Editor trust issues), Sharepoint Add in model (iframe based solution) which are currently used to overcome client side development in Sharepoint. </span></div>
<div>
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">As now we know prerequisites of Sharepoint Framework let's get started. And I hope you have installed the lastest versions of Node,js, npm in your PC.</span></div>
</div>
</div>
<div>
<ol style="text-align: left;">
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Open Windows Command Prompt (Windows key + r then type cmd)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Install npm package Webpack - this npm package is used to bundle our css, javascript files into a one single file shipped to or hosted in a server.<br /><br /><b>npm install -g webpack</b></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Install npm package Yeoman (yo) - this a package to create and manage templates for node packages and it drastically reduces files we need to create as it creates them for us.<br /><br /><b>npm install -g yo</b></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Install npm package gulp - this package is a node based task executor which automates the tasks while you develop your Sharepoint Framework Solutions<br /><br /><b>npm install -g gulp</b></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Create a new Folder where our Sharepoint Framework files will be created in my case it is D:\Software\Sharepoint</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Now access the Created Folder using Windows Command Prompt (cd D:\Software\Sharepoint in my pc)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Microsoft has already created an npm package/template for the Sharepoint Framework which we must install and use,<br /><br /><b>npm install -g @microsoft/generator-sharepoint</b></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then we will use yeoman's magic to create the files in our folder by executing the following command<br /><br /><b>yo @microsoft/sharepoint</b></span></li>
</ol>
</div>
<div>
<ul style="text-align: left;"><ul><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIQIeLd8lZprmoVSVUQDP34jc35y-K_CZ21eWRKjShori4V2_ggUx6TGF2-iFi99JUeGy8Ta91x0e9F5Agzxq-7NNHzET6naUEImsJtxM-NLPmUANxSLIAvs85LTspOVS70goXPYDVTPY/s1600/1.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></a>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then give a name for Sharepoint Framework project</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Select the baseline packages you need to install we will install "<b>Sharepoint 2106 onwards including Sharepoint online</b>" as we are targeting Sharepoint 2016</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then select the folder where the files will be created I select the "<b>Current folder</b>"</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then enter the name for the Sharepoint Webpart </span><div class="separator" style="clear: both; text-align: center;">
</div>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then enter the description for the Sharepoint Webpart </span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then select the javascript framework you need to work with the options are React, Knockout but they are also working on angular too. I will select "<b>No javascript Framework</b>" as this article is just about getting things started</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then we will create the Development certificate for the gulp to use https as our Sharepoint Framework uses https for communication by entering the below command<br /><br /><b>gulp trust-dev-cert</b></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">And finally if you have installed the node version 8.9.0 or above you need to set the below Environment Variable for things to get going smoothly<br /><br /><b>set NODE_NO_HTTP2=1</b></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Then we will run our first Sharepoint Framework project by using the following command<br /><br /><b>gulp serve</b></span></li>
</ul>
</ul>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz4mBdmgrYjErx9rtc8MeTCFsdCRhKwLXH3y2io_iuSyUi6i57NdoLQm7aGdENnIl2yRNiktQHb03ccl3c9xSQ3pNSrAUL6Oht0yEqlLlvap8kiujQH_zOByUqQv2tUwo9O7UHP00-HdE/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="345" data-original-width="679" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz4mBdmgrYjErx9rtc8MeTCFsdCRhKwLXH3y2io_iuSyUi6i57NdoLQm7aGdENnIl2yRNiktQHb03ccl3c9xSQ3pNSrAUL6Oht0yEqlLlvap8kiujQH_zOByUqQv2tUwo9O7UHP00-HdE/s320/3.PNG" width="320" /></span></a></div>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2gLgLpGlpSH0NSeKT_0X7TPTBw7_teM8IeOOvNH1RcLZOZc0fetdtCpJp7Duh-X8PbB1uQDHYtY413IUtb9sJIbVSUN_NLFjDEABKvUGouUq7vCebboAMT_b_bK3N3T_Ej44kb2ToodY/s1600/5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="728" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2gLgLpGlpSH0NSeKT_0X7TPTBw7_teM8IeOOvNH1RcLZOZc0fetdtCpJp7Duh-X8PbB1uQDHYtY413IUtb9sJIbVSUN_NLFjDEABKvUGouUq7vCebboAMT_b_bK3N3T_Ej44kb2ToodY/s320/5.PNG" width="320" /></span></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0QBw-QDesfIgMzGZi1rObo-yESS2A8IJDZVmHC2m_umvTvptOA6_ZKvrMyOhfxRYeJNe7tioeTQEPi-LaCWxP2sOlkXDUqPq8w4ZpSMbx-qGI8cBJTBa4zFdlAOwGTwLyVohpv_0CPj4/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="727" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0QBw-QDesfIgMzGZi1rObo-yESS2A8IJDZVmHC2m_umvTvptOA6_ZKvrMyOhfxRYeJNe7tioeTQEPi-LaCWxP2sOlkXDUqPq8w4ZpSMbx-qGI8cBJTBa4zFdlAOwGTwLyVohpv_0CPj4/s320/6.PNG" width="320" /></span></a></div>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></b>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></b>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></b>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;">4) What's next?</span></b><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Now since you have successully set the up the Sharepoint Framework (SPFx) locally in your in PC. You can start developing your own Sharepoint Framework (SPFx) webparts and host them. I used Visual Studio Code to develop. To open solution folder in Visual Studio Code</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<ul style="text-align: left;"><ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Open Windows Command Prompt (Windows key + r then type cmd)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Navigate to your Solution Directory (D:\Software\Sharepoint in my pc)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Type "<b>code .</b>" and press the enter key</span></li>
</ul>
</ul>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEict0PrTdI6ZbpT4Eq-LaDLIotlG6NJ44eYSWvL-jLaxEdtHU6yvt3CJzDyE8Hte57cguUzmW7XxtppY-yvAnjixG3KYMq5hDH2wpe4mA0sxEXQja1EgcLgQqmEd5cZjIz4WluqhPbUbeE/s1600/7PNG.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="730" data-original-width="1366" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEict0PrTdI6ZbpT4Eq-LaDLIotlG6NJ44eYSWvL-jLaxEdtHU6yvt3CJzDyE8Hte57cguUzmW7XxtppY-yvAnjixG3KYMq5hDH2wpe4mA0sxEXQja1EgcLgQqmEd5cZjIz4WluqhPbUbeE/s320/7PNG.PNG" width="320" /></span></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Further Reading/References</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<a href="https://docs.microsoft.com/en-us/sharepoint/dev/spfx/sharepoint-framework-overview"><span style="font-family: "arial" , "helvetica" , sans-serif;">https://docs.microsoft.com/en-us/sharepoint/dev/spfx/sharepoint-framework-overview</span></a><br />
<br /></div>
</div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-52630248391369152972018-03-11T03:51:00.005-07:002018-03-11T03:51:59.463-07:00Secured Web API using ExpressJS and JSON Web Token in Visual Studio<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Hi Guys,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">This time I created a secured Web API using ExpressJS and JSON Web Token in Visual Studio. Hope you guys like it.</span><br />
<b><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></b>
<b><span style="font-family: Arial, Helvetica, sans-serif;">1) Create Express JS Web Application in Visual Studio</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsA89QypLFzYgKB5b0U9ghTOwFk2856zK_yHk_oPSWLU0_Mj-J6IN6cZsSEnvZyJNbQGOqSMvi1NIp1a61ng4m1Lagjlrdmt9q2eJhRxcK5KGdw0HyTqDD_RkyT7OIwVPA0m6iwSLAehI/s1600/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="657" data-original-width="956" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsA89QypLFzYgKB5b0U9ghTOwFk2856zK_yHk_oPSWLU0_Mj-J6IN6cZsSEnvZyJNbQGOqSMvi1NIp1a61ng4m1Lagjlrdmt9q2eJhRxcK5KGdw0HyTqDD_RkyT7OIwVPA0m6iwSLAehI/s320/1.PNG" width="320" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">2) Add jsonwebtoken by right clicking on npm -> Install new npm Packages</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgp5zVQ4hDHCFXampCPta7qvux6ivjyFvo_ZDtLq8IKWKgDgrk0GxGStVmRgP0gGO5lC8gcEizPOngMaXaI1HC0o-S7bBtRPYKCbaqA1i8z9G3YH7PWJG9n9EGDcxiqKwRtAHfrA0q8X8/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="618" data-original-width="415" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgp5zVQ4hDHCFXampCPta7qvux6ivjyFvo_ZDtLq8IKWKgDgrk0GxGStVmRgP0gGO5lC8gcEizPOngMaXaI1HC0o-S7bBtRPYKCbaqA1i8z9G3YH7PWJG9n9EGDcxiqKwRtAHfrA0q8X8/s320/2.PNG" width="214" /></span></a></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoEYUXSg_9ghg9As4UeFI6zRVI6vwv1cVAm6B6EhEMjE7ajs2vAwsc9ku-q8b8n7ITkxI-lGldRqYYLVFsLGmU5s6LkQs93IqQ6dEME2TJo3NWQvLNbG3meTsxcmzPRf4DLy7HC1SFdiM/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="497" data-original-width="697" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoEYUXSg_9ghg9As4UeFI6zRVI6vwv1cVAm6B6EhEMjE7ajs2vAwsc9ku-q8b8n7ITkxI-lGldRqYYLVFsLGmU5s6LkQs93IqQ6dEME2TJo3NWQvLNbG3meTsxcmzPRf4DLy7HC1SFdiM/s320/3.PNG" width="320" /></span></a></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">3) Create a file named api.js which will be our secured api and paste the following code</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">'use strict';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">var express = require('express');</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">var router = express.Router();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">var jwt = require('jsonwebtoken');</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">/* GET home page. */</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">router.get('/', function (req, res) {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> res.render('index', { title: 'API' });</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">});</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">//Login method to get the token</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">router.post('/login', function (req, res) {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> let user = { id: 3 };</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> let token = jwt.sign(user, 'app_secret');</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> res.json({ token:token });</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">});</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">//our protected resource</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">router.get('/protected', ensureToken, function (req, res) {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> jwt.verify(req.token, 'app_secret', function (err, data) {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> if (err)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> res.sendStatus(403);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> else</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> res.json({ text: "Protected Content" });</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> })</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">});</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">//Function to check whether token available when calling protected reseource</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">function ensureToken(req, res, next)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> let bearerHeader = req.headers["authorization"];</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> if (typeof bearerHeader !== 'undefined')</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> let bearer = bearerHeader.split(" ");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> let bearerToken = bearer[1];</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> req.token = bearerToken;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> next();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> else</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> res.sendStatus(403);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">module.exports = router;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">4) Register the api in app.js as following </span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">var api = require('./routes/api');</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">...</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">var app = express();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">app.use('/api', api);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">5) First we will call the protected method without any tokens</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8JbNh9C6KEUW-6K7sbllRZaP-VsRhXZD1FLLhDGXSzP9ZOraeq-btxVQp-bxYYT_RbFcKQEtLtRwCPgdy1OtthmyhQV-pnjyjW7jmhl7d1teHFShaEKyxrUCqeXEFInQp-kqakbIxr0s/s1600/5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="409" data-original-width="1600" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8JbNh9C6KEUW-6K7sbllRZaP-VsRhXZD1FLLhDGXSzP9ZOraeq-btxVQp-bxYYT_RbFcKQEtLtRwCPgdy1OtthmyhQV-pnjyjW7jmhl7d1teHFShaEKyxrUCqeXEFInQp-kqakbIxr0s/s320/5.PNG" width="320" /></span></a></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">As expected it returns Forbidden (403)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">6) Now we will call the Login method to get the token</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju31wleu5ZpXt3CXgqOEzP6Jstmdb0QA29hQSRfi2Cn7iZ5vsYkjz4-0DhLTkhmWixR7r4qE5ZALVWdJvYjpKhf5tPiRs4rbaKZS-aNjW3WLhc9A3bkeYxLLT7nijXSpBdSJfSTCUaW78/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="548" data-original-width="1600" height="109" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju31wleu5ZpXt3CXgqOEzP6Jstmdb0QA29hQSRfi2Cn7iZ5vsYkjz4-0DhLTkhmWixR7r4qE5ZALVWdJvYjpKhf5tPiRs4rbaKZS-aNjW3WLhc9A3bkeYxLLT7nijXSpBdSJfSTCUaW78/s320/4.PNG" width="320" /></span></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSPLZTtfXQm1yYkE0int78ZKphl2GvbV6GwKcSqZ_tDwE9al4ntoYR6aZuCeJJe8J-p5u6TsvLay2EJl1Mj1C0sXCDUP5juYsz4wDn1u_D9OJCiCZhcA4lrvKm73T9Mp7QhMkmnZOwi5Y/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSPLZTtfXQm1yYkE0int78ZKphl2GvbV6GwKcSqZ_tDwE9al4ntoYR6aZuCeJJe8J-p5u6TsvLay2EJl1Mj1C0sXCDUP5juYsz4wDn1u_D9OJCiCZhcA4lrvKm73T9Mp7QhMkmnZOwi5Y/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSPLZTtfXQm1yYkE0int78ZKphl2GvbV6GwKcSqZ_tDwE9al4ntoYR6aZuCeJJe8J-p5u6TsvLay2EJl1Mj1C0sXCDUP5juYsz4wDn1u_D9OJCiCZhcA4lrvKm73T9Mp7QhMkmnZOwi5Y/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSPLZTtfXQm1yYkE0int78ZKphl2GvbV6GwKcSqZ_tDwE9al4ntoYR6aZuCeJJe8J-p5u6TsvLay2EJl1Mj1C0sXCDUP5juYsz4wDn1u_D9OJCiCZhcA4lrvKm73T9Mp7QhMkmnZOwi5Y/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="412" data-original-width="1600" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSPLZTtfXQm1yYkE0int78ZKphl2GvbV6GwKcSqZ_tDwE9al4ntoYR6aZuCeJJe8J-p5u6TsvLay2EJl1Mj1C0sXCDUP5juYsz4wDn1u_D9OJCiCZhcA4lrvKm73T9Mp7QhMkmnZOwi5Y/s320/6.PNG" width="320" /></span></a></div>
<b><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></b>
<b><span style="font-family: Arial, Helvetica, sans-serif;">7) Now we will call the protected method with the Authorization token</span></b></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-87797724411990040692017-09-12T16:01:00.001-07:002017-09-12T16:02:58.412-07:00Content Sharing using Google Drive ASP.NET MVC<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Hi Guys,</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">I made a small content sharing portal using Google Drive and ASP.NET MVC Hope you like it.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Things you must do before starting, </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;">1) Register as a developer in google - https://developers.google.com/</span></b><br />
<b><span style="font-family: "arial" , "helvetica" , sans-serif;">2) Create API Key and Client AUTH ID - https://developers.google.com/drive/v3/web/enable-sdk</span></b><br />
<b><span style="font-family: "arial" , "helvetica" , sans-serif;">3) Upload content to your google drive and grant public access</span></b><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoiUO2dW6XN0an-rxqrZK1O9J2UobpOzSfuDtZpS2_vJuD2-OSsokGttc2nKvrG7XHO2msHuriYc6W4gGrWYIMUmSR1ZiOzDpcpIN_2p1JCa3msg7R939GB02fU0YPIIq1HNu2om6BPAg/s1600/1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="699" data-original-width="1365" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoiUO2dW6XN0an-rxqrZK1O9J2UobpOzSfuDtZpS2_vJuD2-OSsokGttc2nKvrG7XHO2msHuriYc6W4gGrWYIMUmSR1ZiOzDpcpIN_2p1JCa3msg7R939GB02fU0YPIIq1HNu2om6BPAg/s320/1.png" width="320" /></span></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinVFIbG8Ey5t__S7MvNHiD_TPkIaiLjDKdp58SlYDCbNWGNUG8V5VhDs8zmjx6rOG0cvd3HxW3LUaeWVy9yr-QOM6F4wd9rCruqUYISSZZDUoYJKKJ647JPdcbJbNcLuqCMy30qoxjMTg/s1600/2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="701" data-original-width="1365" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinVFIbG8Ey5t__S7MvNHiD_TPkIaiLjDKdp58SlYDCbNWGNUG8V5VhDs8zmjx6rOG0cvd3HxW3LUaeWVy9yr-QOM6F4wd9rCruqUYISSZZDUoYJKKJ647JPdcbJbNcLuqCMy30qoxjMTg/s320/2.png" width="320" /></span></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<b><span style="font-family: "arial" , "helvetica" , sans-serif;">4) Create an ASP.NET MVC web application using Visual Studio</span></b><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>5) Create Page to Select and Save the ID of the uploaded content - </b><b>Store.cshtml</b></span><br />
<b><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></b>
<span style="font-family: "arial" , "helvetica" , sans-serif;">@model BE.Video </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><script></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> $(document).ready(function () {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> $("#gdriveSelect").click(function (event) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> event.preventDefault();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> // do something</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> });</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> });</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function onApiLoad() {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> gapi.load('auth', { 'callback': onAuthApiLoad });</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> gapi.load('picker');</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function onAuthApiLoad() {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> window.gapi.auth.authorize({</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> 'client_id': 'Your client ID',</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> 'scope': ['https://www.googleapis.com/auth/drive']</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }, handleAuthResult);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> var oauthToken;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function handleAuthResult(authResult) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> if (authResult && !authResult.error) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> oauthToken = authResult.access_token;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> createPicker();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function createPicker() {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> var picker = new google.picker.PickerBuilder()</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> //.addView(new google.picker.DocsUploadView())</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> .addView(new google.picker.DocsView())</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> .setOAuthToken(oauthToken)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> //.setDeveloperKey('Your Key')</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> .setCallback(pickerCallback)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> .build();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> picker.setVisible(true);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function prepareFrame(id) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> var ifrm = document.createElement("iframe");</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ifrm.setAttribute("src", 'https://drive.google.com/file/d/' + id + '/preview');</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ifrm.style.width = "640px";</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ifrm.style.height = "480px";</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> document.getElementById("iframDiv").appendChild(ifrm);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function pickerCallback(data) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> var url = 'nothing';</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> var doc = data[google.picker.Response.DOCUMENTS][0];</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> url = doc[google.picker.Document.URL];</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> document.getElementById('gdriveId').value = doc.id;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> //prepareFrame(doc.id);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> //var message = 'You picked: ' + url;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></script></span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div id="result"></div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><div id="iframDiv"></div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <script type="text/javascript" src="https://apis.google.com/js/api.js"></script></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">@*@using (Html.BeginForm("Store", "Business", FormMethod.Post))*@</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">@using (Ajax.BeginForm("Store", "Business", new AjaxOptions { HttpMethod = "POST" }))</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">{</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.AntiForgeryToken()</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="form-horizontal"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <h4>Video</h4></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <hr /></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.ValidationSummary(true, "", new { @class = "text-danger" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.HiddenFor(model => model.ID)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.HiddenFor(model => model.CreatedBy)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.HiddenFor(model => model.DateCreated)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="form-group"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.LabelFor(model => model.GDriveID, htmlAttributes: new { @class = "control-label col-md-2" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="col-md-10"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="input-group"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.EditorFor(model => model.GDriveID, new { htmlAttributes = new { @class = "form-control", @id = "gdriveId" } })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.ValidationMessageFor(model => model.GDriveID, "", new { @class = "text-danger" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <span class="input-group-btn"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <button class="btn btn-primary" id="gdriveSelect" onclick="onApiLoad()">Select from G Drive</button></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="form-group"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="col-md-10"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="form-group"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="col-md-10"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="form-group"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="col-md-offset-2 col-md-10"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <input type="submit" value="Save" class="btn btn-primary" /></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">}</span><br />
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPLnPMTHdOMpc1h8ebLGAh9mp0drj78IHYqunyoXc9aa53nU8l528HLMTkk3_xewHMu2dbMcQN3gj4nGr29FLdgKgeYTabWPc71H-DHJQhJm6iH7_Vl4h730jSO1fkA6Q0bHstIxO-wvE/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="703" data-original-width="1366" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPLnPMTHdOMpc1h8ebLGAh9mp0drj78IHYqunyoXc9aa53nU8l528HLMTkk3_xewHMu2dbMcQN3gj4nGr29FLdgKgeYTabWPc71H-DHJQhJm6iH7_Vl4h730jSO1fkA6Q0bHstIxO-wvE/s320/3.PNG" width="320" /></span></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT8hhrkMQdhYviht1PM1DnIcU7dpfFOVBYpDsy5BPLvCGl50WSJ-DEfSijQTe8Xi8QJ2vnqz17hySnD_VKl5ZJvyPGBQocckDD34rZHtodfSM6cNEp469SrURaIxo-mOlaoad-kfBgZd4/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="704" data-original-width="1366" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT8hhrkMQdhYviht1PM1DnIcU7dpfFOVBYpDsy5BPLvCGl50WSJ-DEfSijQTe8Xi8QJ2vnqz17hySnD_VKl5ZJvyPGBQocckDD34rZHtodfSM6cNEp469SrURaIxo-mOlaoad-kfBgZd4/s320/4.PNG" width="320" /></span></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitk4lelJgcLepalT8TUdluk9apw1GxczDZoHbbyiMyUnPSLpgMSMse6ntJuzLugnfSp_kvjotLiP-r20-DmTxfB6yLbdaC1grpLiYbMPnV1yPcoXlqsNUf2aJWjYwXWghLwPOjoSMxWj8/s1600/5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" data-original-height="699" data-original-width="1366" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitk4lelJgcLepalT8TUdluk9apw1GxczDZoHbbyiMyUnPSLpgMSMse6ntJuzLugnfSp_kvjotLiP-r20-DmTxfB6yLbdaC1grpLiYbMPnV1yPcoXlqsNUf2aJWjYwXWghLwPOjoSMxWj8/s320/5.PNG" width="320" /></span></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b>6) Create Page to View contents - </b><b>Videos.cshtml</b></span><br />
<b><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></b>
<span style="font-family: "arial" , "helvetica" , sans-serif;">@model IEnumerable<BE.Video></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><script type="text/javascript"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> $(document).ready(function () {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> prepareFrame($("#hdFirstFileID").val());</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> });</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> function prepareFrame(id) {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> $("#iframDiv").html("");</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> var ifrm = document.createElement("iframe");</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ifrm.setAttribute("src", 'https://drive.google.com/file/d/' + id + '/preview');</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ifrm.style.width = "640px";</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ifrm.style.height = "480px";</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> document.getElementById("iframDiv").appendChild(ifrm);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></script></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><div class="row"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="col-md-7"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div id="iframDiv"></div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="col-md-5"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <div class="list-group"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> @foreach (var video in Model)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> if (Model.First() == video)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <input type="hidden" id="hdFirstFileID" value="@video.GDriveID" /></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <a onclick="prepareFrame('@video.GDriveID')" class="list-group-item"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <h4 class="list-group-item-heading">@video.Name</h4></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> <p class="list-group-item-text"> @video.Description </p></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </a></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></div></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b></b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJHeLRI8zJPcwEKG44F-0tDY1RMbgSuMH_Eb9LTXDa-0z4_dH8kJHVC5jiZMrhyoHa8VK_pojrCGnMYpcsNGxtPY2ccUrCNj04ojHC468mD3gyx0K72Yynn-LzDOvlYfuFipjwwmEeD08/s1600/6.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="668" data-original-width="1366" height="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJHeLRI8zJPcwEKG44F-0tDY1RMbgSuMH_Eb9LTXDa-0z4_dH8kJHVC5jiZMrhyoHa8VK_pojrCGnMYpcsNGxtPY2ccUrCNj04ojHC468mD3gyx0K72Yynn-LzDOvlYfuFipjwwmEeD08/s320/6.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLByF0xhQkWANOEWLPKZdcA1RzbqJyGP_weSMFHpKR4sFu4GhV6Ewguq-CBDd9elAuZbexk6HJ53FdrbQrlbytr-kwIYSPsnNoUJ4qLreR_RevfLkKdBElPVOmRNUl5puXlJVALvmzKV8/s1600/7.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="668" data-original-width="1366" height="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLByF0xhQkWANOEWLPKZdcA1RzbqJyGP_weSMFHpKR4sFu4GhV6Ewguq-CBDd9elAuZbexk6HJ53FdrbQrlbytr-kwIYSPsnNoUJ4qLreR_RevfLkKdBElPVOmRNUl5puXlJVALvmzKV8/s320/7.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF4esZ_HGRlrQisuY_NwDESnT5vi28-buG8ellLaHg8tonAX8C3IqAirfFJKODHk_UJ3IF4ve7wO9uiTqxgH_NI_GpkY6CyUKYf1qEaimShYNaif4DxJhUPjQv2nzS9TwAKrz1GkBLT4o/s1600/8.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="596" data-original-width="972" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF4esZ_HGRlrQisuY_NwDESnT5vi28-buG8ellLaHg8tonAX8C3IqAirfFJKODHk_UJ3IF4ve7wO9uiTqxgH_NI_GpkY6CyUKYf1qEaimShYNaif4DxJhUPjQv2nzS9TwAKrz1GkBLT4o/s320/8.PNG" width="320" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
</div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-40538492086931696972017-08-30T05:24:00.001-07:002017-08-30T05:24:33.116-07:00Self Hosted Microservice using OWIN, WebApi to authenticate users<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Hi Guys,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">This time I created Self Hosted Microservice using OWIN, WebApi to authenticate users, this service will store the authentication token on a file and subsequent requests are compared against the stored token.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Hope you like it.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">1) Create a console application as following</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioGmXIOP88QXWCi508Pf9ZVuV4ZnlNbQWtWuBu6UjsWl_jOqTIYUJz1IrWNbgIKqGpE4Dbbid0pDym4WzFgjA55qi0T7YX1gAUDqzUEfhfTJi2Tr2ckykvgO-o7IZtxrg3dBUtjNAIznk/s1600/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" data-original-height="411" data-original-width="337" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioGmXIOP88QXWCi508Pf9ZVuV4ZnlNbQWtWuBu6UjsWl_jOqTIYUJz1IrWNbgIKqGpE4Dbbid0pDym4WzFgjA55qi0T7YX1gAUDqzUEfhfTJi2Tr2ckykvgO-o7IZtxrg3dBUtjNAIznk/s320/1.PNG" width="262" /></span></a></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">2) Install following packages using Nuget </span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Microsoft.AspNet.WebApi.OwinSelfHost</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">Microsoft.Owin</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">Microsoft.AspNet.Cors</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">3) Startup.cs </span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">using Microsoft.Owin;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using Microsoft.Owin.Security.OAuth;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using Owin;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Collections.Generic;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Linq;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Net.Http.Headers;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Text;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Threading.Tasks;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Web.Http;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">namespace SelfHosted.MicroService</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public class Startup</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> // This code configures Web API. The Startup class is specified as a type</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> // parameter in the WebApp.Start method.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public void Configuration(IAppBuilder appBuilder)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> // Configure Web API for self-host. </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> HttpConfiguration config = new HttpConfiguration();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> config.EnableCors();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> config.Routes.MapHttpRoute(</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> name: "DefaultApi",</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> routeTemplate: "api/{controller}/{id}",</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> defaults: new { id = RouteParameter.Optional }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> );</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> config.Formatters.JsonFormatter.SupportedMediaTypes</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> .Add(new MediaTypeHeaderValue("text/html"));</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> ConfigureOAuth(appBuilder);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> appBuilder.UseWebApi(config);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> public void ConfigureOAuth(IAppBuilder app)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> AllowInsecureHttp = true,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> TokenEndpointPath = new PathString("/token"),</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(10),</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> Provider = new SimpleAuthorizationServerProvider()</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> };</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> // Token Generation</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> app.UseOAuthAuthorizationServer(OAuthServerOptions);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">4) SimpleAuthorizationServerProvider </span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">using Microsoft.Owin.Security.OAuth;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using Newtonsoft.Json;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using SelfHosted.MicroService.Model;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.IO;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Security.Claims;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Threading.Tasks;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">namespace SelfHosted.MicroService</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> context.Validated();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> //Your authentication logic here</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var user =</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> UserService.GetUserByCredentials(context.UserName, context.Password);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> if (user != null)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> var identity = new ClaimsIdentity(context.Options.AuthenticationType);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> identity.AddClaim(new Claim("sub", context.UserName));</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> context.Validated(identity);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> else</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> context.SetError("invalid_grant", "Invalid Username or password");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> //This can be written to a Database table too</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var dataFile = "c:\\temp\\accesstoken.txt";</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> TokenStore data = new TokenStore() { token = context.AccessToken };</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> File.WriteAllText(@dataFile, JsonConvert.SerializeObject(data));</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return base.TokenEndpointResponse(context);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">5) Program.cs</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">using Microsoft.Owin.Hosting;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Collections.Generic;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Linq;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Text;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">namespace SelfHosted.MicroService</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> class Program</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> static void Main(string[] args)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> string baseAddress = "http://127.0.0.1:8080/";</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> // Start OWIN host </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> using (WebApp.Start(url: baseAddress))</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> Console.WriteLine("Service Listening at " + baseAddress);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> System.Threading.Thread.Sleep(-1);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">6) CustomAuthorizeAttribute.cs</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">using Newtonsoft.Json;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using SelfHosted.MicroService.Model;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Collections.Generic;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.IO;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Linq;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Net;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Net.Http;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Text;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Threading.Tasks;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Web.Http;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">namespace SelfHosted.MicroService</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public class CustomAuthorizeAttribute : AuthorizeAttribute</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> if (AuthorizeRequest(actionContext))</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> HandleUnauthorizedRequest(actionContext);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> //Code to handle unauthorized request</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> actionContext.Response.Headers.Add("AuthenticationStatus", "NotAuthorized");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> private bool AuthorizeRequest(System.Web.Http.Controllers.HttpActionContext actionContext)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> //This can be read from the database table too</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var token = actionContext.Request.Headers.Authorization.Parameter;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var dataFile = "c:\\temp\\accesstoken.txt";</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var data = File.ReadAllText(@dataFile);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var response = JsonConvert.DeserializeObject<TokenStore>(data);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> if (response.token == token)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return true;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> else</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return false;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: Arial, Helvetica, sans-serif;">7) MoviesController.cs</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Collections;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Collections.Generic;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Linq;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Text;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Threading.Tasks;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Web.Http;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">using System.Web.Http.Cors;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">namespace SelfHosted.MicroService</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public class Movie</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public int Id { get; set; }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public string Name { get; set; }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public string Description { get; set; }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> [EnableCors(origins: "*", headers: "*", methods: "*")]</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public class MoviesController : ApiController</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> Movie[] movies = new Movie[]</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> new Movie { Id = 1, Name = "Skorpion King", Description = "Movie about a king"},</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> new Movie { Id = 2, Name = "Fast & Furious", Description = "Cars, Girls and fun"},</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> new Movie { Id = 3, Name = "Inception", Description = "Mind boggling sensation"},</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> new Movie { Id = 4, Name = "Spider Man", Description = "Will Rock your world"}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> };</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> // GET api/Websites </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> [CustomAuthorizeAttribute]</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public IEnumerable Get()</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return movies;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> // GET api/Websites/5 </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> [CustomAuthorizeAttribute]</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public Movie Get(int id)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> try</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return movies[id];</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> catch (Exception e)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return new Movie();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHFrqjsYjpd54BDLBj3FZvMSdPNPBCndNxfPzEXypxKgLBu7uKNLvJvXGQBjM37yNOzcgYAjx2DfNWKNbldIMU8ynf74U0jBwcH5bqsc92vHtJbZIUEiZRqU1neUBrAhkaQ1L5aUYK77I/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="677" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHFrqjsYjpd54BDLBj3FZvMSdPNPBCndNxfPzEXypxKgLBu7uKNLvJvXGQBjM37yNOzcgYAjx2DfNWKNbldIMU8ynf74U0jBwcH5bqsc92vHtJbZIUEiZRqU1neUBrAhkaQ1L5aUYK77I/s320/2.PNG" width="320" /></a></div>
<br />
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgShP-fFa34Hps1Psiu7Yprk1ZACQYKMR8hYAmx-Z4fecmSWcIY3CieTdxlSBAefSwjAT0p_cJ8Y6JojvcxuHKkybI68mjv0V5IhvNCBT2AeDwndr9zb6aVNKVpL6phTOVqkIE0AhhAeOM/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1600" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgShP-fFa34Hps1Psiu7Yprk1ZACQYKMR8hYAmx-Z4fecmSWcIY3CieTdxlSBAefSwjAT0p_cJ8Y6JojvcxuHKkybI68mjv0V5IhvNCBT2AeDwndr9zb6aVNKVpL6phTOVqkIE0AhhAeOM/s320/3.PNG" width="320" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhM-Dm2q3Vc_IBa8rFrgwoVHW5TjJWs7KC2hj9JWq2vu4wDaZoB0EIXRfIQcQ3iI5e1irMjLftFX9O8WRyoJGyk1oNs9mtYzopKnui-u3Vo_NBLZ-O69SWBAtUdE9AXQ1PKnRT7-w9JcE/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="714" data-original-width="1600" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhM-Dm2q3Vc_IBa8rFrgwoVHW5TjJWs7KC2hj9JWq2vu4wDaZoB0EIXRfIQcQ3iI5e1irMjLftFX9O8WRyoJGyk1oNs9mtYzopKnui-u3Vo_NBLZ-O69SWBAtUdE9AXQ1PKnRT7-w9JcE/s320/4.PNG" width="320" /></a><br />
<br />
<br />
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<br /></div>
</div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-23384736732925997192017-08-08T11:03:00.001-07:002017-08-08T11:03:19.894-07:00Consuming a secured JWT webapi using ionic, angular 2<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">I had a requirement to create an app which consumes a secured JWT webapi using ionic and angular 2. This is how I did it. Hope you like.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Reference : <strong>http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/</strong></span><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></strong>
<strong><span style="font-family: Arial, Helvetica, sans-serif;">1) Open Startup.cs and paste the following code</span></strong><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></strong>
<span style="font-family: Arial, Helvetica, sans-serif;">using Microsoft.Owin;<br />using Microsoft.Owin.Security;<br />using Microsoft.Owin.Security.DataHandler.Encoder;<br />using Microsoft.Owin.Security.Jwt;<br />using Microsoft.Owin.Security.OAuth;<br />using Owin;<br />using System;<br />using System.Collections.Generic;<br />using System.Configuration;<br />using System.Linq;<br />using System.Web;<br />using System.Web.Http;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">[assembly: OwinStartup(typeof(SecuredWebAPI.Startup))]<br />namespace SecuredWebAPI<br />{<br /> public class Startup<br /> {<br /> public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public static string PublicClientId { get; private set; }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public void Configuration(IAppBuilder app)<br /> {<br /> HttpConfiguration config = new HttpConfiguration();<br /> ConfigureOAuth(app);<br /> ConfigureOAuthTokenConsumption(app);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> WebApiConfig.Register(config);<br /> app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);<br /> app.UseWebApi(config);<br /> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> private void ConfigureOAuthTokenConsumption(IAppBuilder app)<br /> {<br /> //Hosting url<br /> var issuer = "http://localhost:53726";<br /> string audienceId = ConfigurationManager.AppSettings["as:AudienceId"];<br /> byte[] audienceSecret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["as:AudienceSecret"]);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> // Api controllers with an [Authorize] attribute will be validated with JWT<br /> app.UseJwtBearerAuthentication(<br /> new JwtBearerAuthenticationOptions<br /> {<br /> AuthenticationMode = AuthenticationMode.Active,<br /> AllowedAudiences = new[] { audienceId },<br /> IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]<br /> {<br /> new SymmetricKeyIssuerSecurityTokenProvider(issuer, audienceSecret)<br /> }<br /> });<br /> }<br /> public void ConfigureOAuth(IAppBuilder app)<br /> {<br /> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()<br /> {<br /> //For Dev enviroment only (on production should be AllowInsecureHttp = false)<br /> AllowInsecureHttp = true,<br /> TokenEndpointPath = new PathString("/token"),<br /> AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),<br /> Provider = new SimpleAuthorizationServerProvider(),<br /> AccessTokenFormat = new CustomJwtFormat("http://localhost:53726") //Hosing Url<br /> };</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> // OAuth 2.0 Bearer Access Token Generation<br /> app.UseOAuthAuthorizationServer(OAuthServerOptions);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> }<br />}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<strong><span style="font-family: Arial, Helvetica, sans-serif;">2) Create CustomJwtFormat.cs and paste the following code</span></strong><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></strong>
<span style="font-family: Arial, Helvetica, sans-serif;">using Microsoft.Owin.Security;<br />using Microsoft.Owin.Security.DataHandler.Encoder;<br />using System;<br />using System.Collections.Generic;<br />using System.Configuration;<br />using System.IdentityModel.Tokens;<br />using System.Linq;<br />using System.Web;<br />using Thinktecture.IdentityModel.Tokens;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">namespace SecuredWebAPI<br />{<br /> public class CustomJwtFormat : ISecureDataFormat<AuthenticationTicket><br /> {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> private readonly string _issuer = string.Empty;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public CustomJwtFormat(string issuer)<br /> {<br /> _issuer = issuer;<br /> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public string Protect(AuthenticationTicket data)<br /> {<br /> if (data == null)<br /> {<br /> throw new ArgumentNullException("data");<br /> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> string audienceId = ConfigurationManager.AppSettings["as:AudienceId"];</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> string symmetricKeyAsBase64 = ConfigurationManager.AppSettings["as:AudienceSecret"];</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var signingKey = new HmacSigningCredentials(keyByteArray);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var issued = data.Properties.IssuedUtc;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var expires = data.Properties.ExpiresUtc;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var handler = new JwtSecurityTokenHandler();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> var jwt = handler.WriteToken(token);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> return jwt;<br /> }</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> public AuthenticationTicket Unprotect(string protectedText)<br /> {<br /> throw new NotImplementedException();<br /> }<br /> }<br />}</span><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;">3) Open web.config and add the following app settings</span></strong><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></strong>
<span style="font-family: Arial, Helvetica, sans-serif;"><!-- You can modify these if you want --></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> <add key="as:AudienceId" value="8866" /><br /> <add key="as:AudienceSecret" value="U2gxMjM0NTY3ODkwMjEyMTIxMjFyZXJlcmVycmVxdGg=" /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Now we will look at the client to consume this web api, I am not going to include all the angular 2 code here. I will just add the service and login codes. Remember you need </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><strong>angular2-jwt</strong> to consume this web api through generated access token.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<strong><span style="font-family: Arial, Helvetica, sans-serif;">1) Security.service.ts </span></strong><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></strong>
<span style="font-family: Arial, Helvetica, sans-serif;">import { Injectable } from '@angular/core';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import {Http,Headers} from '@angular/http';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { AppSettings } from '../app.settings';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { LoginData,CurrentUserInfo } from '../app.common';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import {Observable} from 'rxjs/Observable';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { AuthHttp } from 'angular2-jwt';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">@Injectable()</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">export class SecurityService {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">public currentUserInfo:CurrentUserInfo;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">constructor(private http: Http,private authHttp:AuthHttp) {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.currentUserInfo = new CurrentUserInfo();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">login(loginData:LoginData) : any {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">var headers = new Headers();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">headers.append('Content-Type', 'application/x-www-form-urlencoded');</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">var credentials = "grant_type=password"</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">+ "&userName=" + loginData.userName</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">+ "&password=" + loginData.password;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">return this.http.post(AppSettings.API_ENDPOINT +'/token', credentials, { headers: headers });</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<strong><span style="font-family: Arial, Helvetica, sans-serif;">2) Login.ts </span></strong><br />
<strong><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></strong>
<span style="font-family: Arial, Helvetica, sans-serif;">import { Component, ViewChild } from '@angular/core';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { Nav, Platform } from 'ionic-angular';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { StatusBar } from '@ionic-native/status-bar';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { SecurityService } from '../../app/services/security.service'</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { LoginData, CurrentUserInfo } from '../../app/app.common'</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { AuthHttp,JwtHelper } from 'angular2-jwt';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">import { AppSettings } from '../../app/app.settings';</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">@Component({</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">selector:'login',</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">templateUrl:'login.html',</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">providers: [SecurityService]</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">})</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">export class LoginPage {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">private message:string;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">private loginData:LoginData;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">constructor(private secService:SecurityService,private authHttp:AuthHttp){</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.loginData = new LoginData();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">login(loginData)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.secService.login(loginData).subscribe((res) => {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">var resObj = res.json();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">if (typeof resObj.access_token != "undefined")</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.secService.currentUserInfo.isLoggedIn = true;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">localStorage.setItem('access_token',resObj.access_token);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">var jwtHelper = new JwtHelper();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">localStorage.setItem('loginKey',jwtHelper.decodeToken(resObj.access_token).loginKey);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">this.message = "Successfull Login";</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.authHttp.get(AppSettings.API_ENDPOINT +'/api/User/GetFunctions?loginKey='+localStorage.getItem('loginKey'))</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">.subscribe((res)=> {console.log(res);});</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">else</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.secService.currentUserInfo.isLoggedIn = false;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.message = "login Failed!!! "+</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">JSON.parse(resObj._body).error_description;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">},(error)=>{</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.secService.currentUserInfo.isLoggedIn = false;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">this.message = "login Failed!!! "+ error;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">});</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">}</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnQ89BlvO0wVoikkQ4BwenlrCkkArMTLQeLhx4uXlgZcfp0gOI0D-Vm6GRL6lg20BYvLFPoZkXZIqNbYhwkQxQvh4nH9JEyQ14tzpCbjvv-vikYSn-8N2ybHYGqOfwziSsK6HSdwPfBEQ/s1600/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="401" data-original-width="295" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnQ89BlvO0wVoikkQ4BwenlrCkkArMTLQeLhx4uXlgZcfp0gOI0D-Vm6GRL6lg20BYvLFPoZkXZIqNbYhwkQxQvh4nH9JEyQ14tzpCbjvv-vikYSn-8N2ybHYGqOfwziSsK6HSdwPfBEQ/s320/1.PNG" width="235" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju4aoyMj84BUfrtQVHDybP6vnKoLudqLt_IsvxMATM5X4mxb43b7k9vJnIqttzlhxeJKTxW_zuvG51S5vZmJSBZ-HnTZmVc0brj-01VakR59-5tnhkiRidD47Rd_LN57L8udyeLC9frtY/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="723" data-original-width="1366" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju4aoyMj84BUfrtQVHDybP6vnKoLudqLt_IsvxMATM5X4mxb43b7k9vJnIqttzlhxeJKTxW_zuvG51S5vZmJSBZ-HnTZmVc0brj-01VakR59-5tnhkiRidD47Rd_LN57L8udyeLC9frtY/s320/2.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYaeZVFSEg9hSLB2duaiuVcgFt78W7KuXz0fqOxW9ZDgzW0MnMV_E8hk9yAeMzVP96xK8LQCW7NyxJRUijWejiOs6kSPsZ3cwIbg0IdGhvbOcKESpwKAqTYhgVz6Gl2sK9mXbuEHxsuQM/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="700" data-original-width="1366" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYaeZVFSEg9hSLB2duaiuVcgFt78W7KuXz0fqOxW9ZDgzW0MnMV_E8hk9yAeMzVP96xK8LQCW7NyxJRUijWejiOs6kSPsZ3cwIbg0IdGhvbOcKESpwKAqTYhgVz6Gl2sK9mXbuEHxsuQM/s320/3.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAzZqji9crfY_alJkilWODBuH2_hJoh4qU7QuZDs3-VKlB08i9zE_g1I3DoqdVmae_ScOPzsbv92inbka4IQ2fdcrUpPWz_qaLtvW-JllSoZZR_unnNdS5pa97v0JAbOk-X6bC20p629U/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="697" data-original-width="1366" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAzZqji9crfY_alJkilWODBuH2_hJoh4qU7QuZDs3-VKlB08i9zE_g1I3DoqdVmae_ScOPzsbv92inbka4IQ2fdcrUpPWz_qaLtvW-JllSoZZR_unnNdS5pa97v0JAbOk-X6bC20p629U/s320/4.PNG" width="320" /></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br data-cke-eol="1" /></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-44541654776962293212017-07-15T13:13:00.001-07:002017-07-15T13:13:14.975-07:00Secured Token Based WebAPI with custom authentication<div dir="ltr" style="text-align: left;" trbidi="on">
Hi Guys,<br />
<br />
I had a requirement to create Secured Token Based WebAPI which can be consumed using mobile applications. And it had to check a custom authentication stored in database. Upon successful login an auth token would be returned subsequent requests must pass this auth token to get data.<br />
<br />
Reference : http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/<br />
<br />
<br />
<br />
1) Create a WebAPI Project as following<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKBiBzbok0HySNJNGdSPzlwZyjd7M4lrMDykDB-puruQsQZTac-0gn54XXylH9B8pWKwGksdLwk2xPWOLHQAzihELVev7GHFkRrHRahWJZEJTOpdWb-o5YYNtV5lANNz9aGm7LeKue8Y/s1600/-1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="433" data-original-width="279" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKBiBzbok0HySNJNGdSPzlwZyjd7M4lrMDykDB-puruQsQZTac-0gn54XXylH9B8pWKwGksdLwk2xPWOLHQAzihELVev7GHFkRrHRahWJZEJTOpdWb-o5YYNtV5lANNz9aGm7LeKue8Y/s320/-1.PNG" width="206" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2) Modify the Startup.cs as following<br />
<br />
using Microsoft.Owin;<br />
using Microsoft.Owin.Security.OAuth;<br />
using Owin;<br />
using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Web;<br />
using System.Web.Http;<br />
<br />
[assembly: OwinStartup(typeof(SecuredWebAPI.Startup))]<br />
namespace SecuredWebAPI<br />
{<br />
public class Startup<br />
{<br />
public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }<br />
<br />
public static string PublicClientId { get; private set; }<br />
<br />
public void Configuration(IAppBuilder app)<br />
{<br />
HttpConfiguration config = new HttpConfiguration();<br />
ConfigureOAuth(app);<br />
<br />
WebApiConfig.Register(config);<br />
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);<br />
app.UseWebApi(config);<br />
}<br />
<br />
public void ConfigureOAuth(IAppBuilder app)<br />
{<br />
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()<br />
{<br />
AllowInsecureHttp = true,<br />
TokenEndpointPath = new PathString("/token"),<br />
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),<br />
Provider = new SimpleAuthorizationServerProvider()<br />
<br />
<br />
};<br />
<br />
<br />
<br />
// Token Generation<br />
app.UseOAuthAuthorizationServer(OAuthServerOptions);<br />
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());<br />
<br />
<br />
<br />
<br />
<br />
}<br />
<br />
}<br />
}<br />
<br />
<br />
3) Modify the SimpleAuthorizationServerProvider.cs with the following<br />
<br />
<br />
using Microsoft.AspNet.Identity.EntityFramework;<br />
using Microsoft.Owin.Security.OAuth;<br />
using System;<br />
using System.Security.Claims;<br />
using System.Threading.Tasks;<br />
<br />
namespace SecuredWebAPI<br />
{<br />
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider<br />
{<br />
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)<br />
{<br />
context.Validated();<br />
}<br />
<br />
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)<br />
{<br />
//Your authentication logic here<br />
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });<br />
<br />
<br />
<br />
int userId = -1;<br />
BE.ReturnDataMsg<Guid> objReturnLoginDataMsg = null;<br />
<br />
bool mustChangePwd;<br />
string name;<br />
objReturnLoginDataMsg =<br />
BusinessLayer.Services.UserService.Login(context.UserName, context.Password,<br />
1, true, out mustChangePwd, out name, out userId, true);<br />
<br />
if (objReturnLoginDataMsg.Status == BE.ProcessStatus.Successful ||<br />
objReturnLoginDataMsg.Status == BE.ProcessStatus.SuccessButExpired)<br />
{<br />
<br />
var identity = new ClaimsIdentity(context.Options.AuthenticationType);<br />
identity.AddClaim(new Claim("sub", context.UserName));<br />
identity.AddClaim(new Claim("loginKey", objReturnLoginDataMsg.Data.ToString()));<br />
context.Validated(identity);<br />
<br />
<br />
}<br />
<br />
else<br />
{<br />
context.SetError("invalid_grant", objReturnLoginDataMsg.Message);<br />
return;<br />
<br />
<br />
<br />
} <br />
<br />
} <br />
<br />
}<br />
}<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw8raooSHJ5R7N98yl3KDJEibKykkSN4K9kcRPq0Ic51dxlAcaw4sg78LOV9VtsxopmX92guZh-ErCiri8RjBKWqGwGeR9IfJ-hfsEk9iW5PEK1IQ5QCapjLe3AvnWyZD0zgUKxuIwOAw/s1600/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="727" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw8raooSHJ5R7N98yl3KDJEibKykkSN4K9kcRPq0Ic51dxlAcaw4sg78LOV9VtsxopmX92guZh-ErCiri8RjBKWqGwGeR9IfJ-hfsEk9iW5PEK1IQ5QCapjLe3AvnWyZD0zgUKxuIwOAw/s320/1.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil9GxDV8rjSEaG4L7WwtOaMyqOqDdcH-E1XO6fJ-BZBLsz9z5_uF-CQKPk83wXY1A9uGr4XCcHOteY9T5sDMuLfFjqsbpwXVzaw-gkyGZkLwfSsSjM_xyjtfBMCJmKpnqSShwDTmHe18k/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="727" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil9GxDV8rjSEaG4L7WwtOaMyqOqDdcH-E1XO6fJ-BZBLsz9z5_uF-CQKPk83wXY1A9uGr4XCcHOteY9T5sDMuLfFjqsbpwXVzaw-gkyGZkLwfSsSjM_xyjtfBMCJmKpnqSShwDTmHe18k/s320/2.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtnLliT-31CBzLg5Akdlphc6HfDotH8aeJ57oMNmMmxeAQkd4FyTsvaR630oH0sThbbbJ_9NU0pow90RJha3RUg4nZ03NpyPqt6FDME7lGrHdiRjhKyhr_9vH4VNzO08hCtB_MqXT4WCA/s1600/3.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="726" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtnLliT-31CBzLg5Akdlphc6HfDotH8aeJ57oMNmMmxeAQkd4FyTsvaR630oH0sThbbbJ_9NU0pow90RJha3RUg4nZ03NpyPqt6FDME7lGrHdiRjhKyhr_9vH4VNzO08hCtB_MqXT4WCA/s320/3.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgclK2Fw8-VBquqARhUu4bhxqkHcUOLdZn6MsDWzggXjNJ7s3uBqBUL6YcRjVNrGeladzDNrPexrZdprezloMfNxxbwOF_2qFwNOkBgivXRDvSTwY5cTEWW_EwA2hWdqCw9nt2SQ_v8SWo/s1600/4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="726" data-original-width="1366" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgclK2Fw8-VBquqARhUu4bhxqkHcUOLdZn6MsDWzggXjNJ7s3uBqBUL6YcRjVNrGeladzDNrPexrZdprezloMfNxxbwOF_2qFwNOkBgivXRDvSTwY5cTEWW_EwA2hWdqCw9nt2SQ_v8SWo/s320/4.PNG" width="320" /></a></div>
<br /></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0tag:blogger.com,1999:blog-3910581344292765787.post-63898167596528142432017-02-26T01:20:00.000-08:002017-02-26T01:23:18.773-08:00Uploading images using WebApi and JSON<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Hi All,</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">I recently had a requirement to create a Web API to work with a mobile phone. I was required to create a method to upload images. So I did it the following way hope you like it.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">1) Class Definitions</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class AuthData</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public string auth_token { get; set; }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class ImageSetData : AuthData</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public string Name { get; set; }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public List<Image> Images { get; set; }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public class Image</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public string FileName { get; set; }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public string Extension { get; set; }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> public byte[] ImageData { get; set; }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">2) WebApi Method</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">public ReturnMsg SaveFile([FromBody] ImageSetData imageData)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> ReturnMsg objReturnMsg = new ReturnMsg();</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> try</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> if (APIHelper.AuthenticateToken(imageData.auth_token))</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> foreach (var image in imageData.Images)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> File.WriteAllBytes(string.Format("{0}\\{1}.{2}", HttpContext.Current.Server.MapPath("~/App_Data") , image.FileName, image.Extension), image.ImageData);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> } </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> else</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> objReturnMsg.success = false;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> objReturnMsg.msg = "Invalid Token. Please Login to continue";</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> catch (Exception ex)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> {</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> objReturnMsg.success = false;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> objReturnMsg.msg = "Internal Server Error. Contact Admin.";</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> APIHelper.Log(ex.Message, ex.StackTrace);</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> return objReturnMsg;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> }</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">3) Post Man Screen shot and Image</span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk6hXc9WfLedHf58VCddd3D-n52xJ9OG8m923X2rPKOpJJuFm9bcoJAlfooGHXWC13nfa_xjyWMvdo9o-LdjlZQd7W6umAFRYjOuJUeO_5WFa0voUF6fuunOfeaPQV8kh-woT4Sgzi4fM/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk6hXc9WfLedHf58VCddd3D-n52xJ9OG8m923X2rPKOpJJuFm9bcoJAlfooGHXWC13nfa_xjyWMvdo9o-LdjlZQd7W6umAFRYjOuJUeO_5WFa0voUF6fuunOfeaPQV8kh-woT4Sgzi4fM/s320/Capture.PNG" width="320" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrD6R2USZivwRJgUluEK_EzaTDBVeQP1GCXZUIGbGfCvG0U-dz0lVmQOvwvtGFz9ItR2ynmLMdYMcFvCYfa046d54P0UaUFb0G8_MU1wQZUivR5QmJO5A_kDzZdEKhmhCFaB2d-f1P9w4/s1600/Capture1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="45" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrD6R2USZivwRJgUluEK_EzaTDBVeQP1GCXZUIGbGfCvG0U-dz0lVmQOvwvtGFz9ItR2ynmLMdYMcFvCYfa046d54P0UaUFb0G8_MU1wQZUivR5QmJO5A_kDzZdEKhmhCFaB2d-f1P9w4/s320/Capture1.PNG" width="320" /></a><br />
<br /></div>
Shahimhttp://www.blogger.com/profile/01990271883859156502noreply@blogger.com0