From 54cd03f60350525723c61da6c76d128da69e4a8f Mon Sep 17 00:00:00 2001 From: Roel de Vries Date: Wed, 4 Oct 2017 22:05:55 +0200 Subject: [PATCH 1/2] Added WebForms example --- .../ApplicationInsights.config | 2 + .../Content/Site.css | 27 +++ .../SendGrid.ASPWebFormsSamples/Default.aspx | 64 +++++++ .../Default.aspx.cs | 49 +++++ .../Default.aspx.designer.cs | 105 +++++++++++ .../SendGrid.ASPWebFormsSamples/Global.asax | 1 + .../Global.asax.cs | 13 ++ .../Models/EmailMessageInfo.cs | 17 ++ .../Properties/AssemblyInfo.cs | 35 ++++ .../SendGrid.ASPWebFormsSamples.csproj | 175 ++++++++++++++++++ .../Services/SendGridService.cs | 55 ++++++ .../SendGrid.ASPWebFormsSamples/Site.Master | 32 ++++ .../Site.Master.cs | 17 ++ .../Site.Master.designer.cs | 24 +++ .../Web.Debug.config | 30 +++ .../Web.Release.config | 31 ++++ .../SendGrid.ASPWebFormsSamples/Web.config | 44 +++++ .../SendGrid.ASPWebFormsSamples/favicon.ico | Bin 0 -> 32038 bytes .../packages.config | 13 ++ 19 files changed, 734 insertions(+) create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/ApplicationInsights.config create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Content/Site.css create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.designer.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Models/EmailMessageInfo.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Properties/AssemblyInfo.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/SendGrid.ASPWebFormsSamples.csproj create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Services/SendGridService.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.designer.cs create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Debug.config create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Release.config create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.config create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/favicon.ico create mode 100644 ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/packages.config diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/ApplicationInsights.config b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/ApplicationInsights.config new file mode 100644 index 000000000..75e12df9d --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/ApplicationInsights.config @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Content/Site.css b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Content/Site.css new file mode 100644 index 000000000..92e16d9c0 --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Content/Site.css @@ -0,0 +1,27 @@ +/* Wrap content on words otherwise the body response overflows in the Well*/ +.well { + word-wrap: break-word; +} + +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; + padding-bottom: 20px; +} + +/* Wrapping element */ +/* Set some basic padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; + margin-top: 50px; +} + +/* Responsive: Portrait tablets and up */ +@media screen and (min-width: 768px) { + .body-content { + padding: 0; + } +} + + diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx new file mode 100644 index 000000000..6c3563a2e --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx @@ -0,0 +1,64 @@ +<%@ Page Title="Home Page" Async="true" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SendGrid.ASPWebFormsSamples.Default" %> + + +
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+ + + Response body: +
+
+
+
\ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.cs new file mode 100644 index 000000000..104a1e5ac --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.cs @@ -0,0 +1,49 @@ +using System; +using System.Threading.Tasks; +using System.Web.UI; +using SendGrid.ASPWebFormsSamples.Models; +using SendGrid.ASPWebFormsSamples.Services; + +namespace SendGrid.ASPWebFormsSamples +{ + public partial class Default : Page + { + private readonly SendGridService _sendGridService; + + protected Default() + { + _sendGridService = new SendGridService(); + } + + protected void Page_Load(object sender, EventArgs e) + { + responseInfo.Visible = false; + } + + protected async void sendButton_Click(object sender, EventArgs e) + { + // Prepare the email message info model + var messageInfo = new EmailMessageInfo + { + FromEmailAddress = fromInput.Value, + ToEmailAddress = toInput.Value, + CcEmailAddress = ccInput.Value, + BccEmailAddress = bccInput.Value, + EmailSubject = subjectInput.Value, + EmailBody = bodyInput.Value + }; + + // Make an API call, and save the response + var apiResponse = await _sendGridService.Send(messageInfo); + + await SetResponseInfoContainers(apiResponse); + } + + private async Task SetResponseInfoContainers(Response apiResponse) + { + responseInfo.Visible = true; + responseStatus.InnerText = $"Statuscode {(int)apiResponse.StatusCode}: {apiResponse.StatusCode}"; + responseBody.InnerText = await apiResponse.Body.ReadAsStringAsync(); + } + } +} \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.designer.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.designer.cs new file mode 100644 index 000000000..4f8bf4b8c --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Default.aspx.designer.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SendGrid.ASPWebFormsSamples { + + + public partial class Default { + + /// + /// fromInput control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputText fromInput; + + /// + /// toInput control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputText toInput; + + /// + /// ccInput control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputText ccInput; + + /// + /// bccInput control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputText bccInput; + + /// + /// subjectInput control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputText subjectInput; + + /// + /// bodyInput control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlTextArea bodyInput; + + /// + /// sendButton control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button sendButton; + + /// + /// responseInfo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl responseInfo; + + /// + /// responseStatus control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl responseStatus; + + /// + /// responseBody control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl responseBody; + } +} diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax new file mode 100644 index 000000000..7788a91b1 --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="SendGrid.ASPWebFormsSamples.Global" Language="C#" %> diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax.cs new file mode 100644 index 000000000..9799aae59 --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Global.asax.cs @@ -0,0 +1,13 @@ +using System; +using System.Web; + +namespace SendGrid.ASPWebFormsSamples +{ + public class Global : HttpApplication + { + void Application_Start(object sender, EventArgs e) + { + // Code that runs on application startup + } + } +} \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Models/EmailMessageInfo.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Models/EmailMessageInfo.cs new file mode 100644 index 000000000..cb5761aef --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Models/EmailMessageInfo.cs @@ -0,0 +1,17 @@ +namespace SendGrid.ASPWebFormsSamples.Models +{ + public class EmailMessageInfo + { + public string FromEmailAddress { get; set; } + + public string ToEmailAddress { get; set; } + + public string CcEmailAddress { get; set; } + + public string BccEmailAddress { get; set; } + + public string EmailSubject { get; set; } + + public string EmailBody { get; set; } + } +} \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Properties/AssemblyInfo.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..e4e2e09ee --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SendGrid.ASPWebFormsSamples")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SendGrid.ASPWebFormsSamples")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0a24e647-5885-477c-a766-7385bcc6982e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/SendGrid.ASPWebFormsSamples.csproj b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/SendGrid.ASPWebFormsSamples.csproj new file mode 100644 index 000000000..7a608eb4e --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/SendGrid.ASPWebFormsSamples.csproj @@ -0,0 +1,175 @@ + + + + + + + Debug + AnyCPU + + + 2.0 + {0A24E647-5885-477C-A766-7385BCC6982E} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + SendGrid.ASPWebFormsSamples + SendGrid.ASPWebFormsSamples + v4.6.1 + true + + + + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + true + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + + + + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Sendgrid.9.9.0\lib\net452\SendGrid.dll + + + + + + + + ..\packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll + + + ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll + + + ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + + + ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + + + ..\packages\System.Security.Cryptography.X509Certificates.4.3.1\lib\net461\System.Security.Cryptography.X509Certificates.dll + + + + + + + + + + + + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + + + + + + + + Designer + + + + + Default.aspx + ASPXCodeBehind + + + Default.aspx + + + Global.asax + + + + + + Site.Master + ASPXCodeBehind + + + Site.Master + + + + + + + Web.config + + + Web.config + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 39819 + / + http://localhost:39819/ + False + False + + + False + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Services/SendGridService.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Services/SendGridService.cs new file mode 100644 index 000000000..284a176ec --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Services/SendGridService.cs @@ -0,0 +1,55 @@ +using System.Configuration; +using System.Threading.Tasks; +using SendGrid.ASPWebFormsSamples.Models; +using SendGrid.Helpers.Mail; + +namespace SendGrid.ASPWebFormsSamples.Services +{ + public class SendGridService + { + private readonly SendGridClient _client; + + public SendGridService() + { + // Retrieve the API key from an appSettings variable from the web.config + var apiKey = ConfigurationManager.AppSettings["SendGrid_API_Key"]; + + // Initialize the SendGrid client + _client = new SendGridClient(apiKey); + } + + public async Task Send(EmailMessageInfo messageInfo) + { + // Prepare the SendGrid email message + var sendgridMessage = new SendGridMessage + { + From = new EmailAddress(messageInfo.FromEmailAddress), + Subject = messageInfo.EmailSubject, + HtmlContent = messageInfo.EmailBody + }; + + // Add the "To" email address to the message + sendgridMessage.AddTo(new EmailAddress(messageInfo.ToEmailAddress)); + + // Check if any Cc email address was specified + if (!string.IsNullOrWhiteSpace(messageInfo.CcEmailAddress)) + { + // Add the email address for Cc to the message + sendgridMessage.AddCc(new EmailAddress(messageInfo.CcEmailAddress)); + } + + // Check if any Bcc email address was specified + if (!string.IsNullOrWhiteSpace(messageInfo.BccEmailAddress)) + { + // Add the email address for Bcc to the message + sendgridMessage.AddBcc(new EmailAddress(messageInfo.BccEmailAddress)); + } + + // Send the message to SendGrid, and save the API response + var response = await _client.SendEmailAsync(sendgridMessage); + + // Return the SendGrid response + return response; + } + } +} \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master new file mode 100644 index 000000000..b46708cc6 --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master @@ -0,0 +1,32 @@ +<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="SendGrid.ASPWebFormsSamples.SiteMaster" %> + + + + + + + + <%: Page.Title %> - WebForms Example + + + + + + +
+ + +
+ + +
+ +
+ + diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.cs new file mode 100644 index 000000000..0bdaa861c --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace SendGrid.ASPWebFormsSamples +{ + public partial class SiteMaster : MasterPage + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.designer.cs b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.designer.cs new file mode 100644 index 000000000..f9ac0331b --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Site.Master.designer.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SendGrid.ASPWebFormsSamples { + + + public partial class SiteMaster { + + /// + /// MainContent control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent; + } +} diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Debug.config b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Debug.config new file mode 100644 index 000000000..fae9cfefa --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Release.config b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Release.config new file mode 100644 index 000000000..da6e960b8 --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.config b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.config new file mode 100644 index 000000000..14aa4a662 --- /dev/null +++ b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/Web.config @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/favicon.ico b/ExampleNet45ASPNetProject/SendGrid.ASPWebFormsSamples/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 + + + + + + + + + + + + \ No newline at end of file From a608ac5a2c7777bcd8b8d55f3019722ec9ca58bf Mon Sep 17 00:00:00 2001 From: Roel de Vries Date: Wed, 4 Oct 2017 22:10:47 +0200 Subject: [PATCH 2/2] Updated readme. Updated solution file to include new WebForms project. --- ExampleNet45ASPNetProject/README.md | 5 +++-- ExampleNet45ASPNetProject/SendGrid.ASPSamples.sln | 13 +++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ExampleNet45ASPNetProject/README.md b/ExampleNet45ASPNetProject/README.md index f824aeb8b..d30e9f105 100644 --- a/ExampleNet45ASPNetProject/README.md +++ b/ExampleNet45ASPNetProject/README.md @@ -13,8 +13,9 @@ Update the "SendGridApiKey" appSettings variable within the web.config file. ## Steps -1. Open SendGrid.ASPSamples.sln -2. Build the solution and run the project +1. Open SendGrid.ASPSamples.sln +2. Switch to one of the example project (right click on a project -> "Set as StartUp project") +2. Build and run the project You may need to download the latest Nuget executable and run `nuget.exe restore` diff --git a/ExampleNet45ASPNetProject/SendGrid.ASPSamples.sln b/ExampleNet45ASPNetProject/SendGrid.ASPSamples.sln index 961a97424..ab4a2f52c 100644 --- a/ExampleNet45ASPNetProject/SendGrid.ASPSamples.sln +++ b/ExampleNet45ASPNetProject/SendGrid.ASPSamples.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SendGrid.ASPSamples", "SendGrid.ASPSamples\SendGrid.ASPSamples.csproj", "{14FA0F22-DFB2-4CE2-867A-242E75F64E1B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SendGrid.ASPWebFormsSamples", "SendGrid.ASPWebFormsSamples\SendGrid.ASPWebFormsSamples.csproj", "{0A24E647-5885-477C-A766-7385BCC6982E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,8 +17,15 @@ Global {14FA0F22-DFB2-4CE2-867A-242E75F64E1B}.Debug|Any CPU.Build.0 = Debug|Any CPU {14FA0F22-DFB2-4CE2-867A-242E75F64E1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {14FA0F22-DFB2-4CE2-867A-242E75F64E1B}.Release|Any CPU.Build.0 = Release|Any CPU + {0A24E647-5885-477C-A766-7385BCC6982E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A24E647-5885-477C-A766-7385BCC6982E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A24E647-5885-477C-A766-7385BCC6982E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A24E647-5885-477C-A766-7385BCC6982E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {36445F8F-3714-4B6A-89DB-17DC0C001CF5} + EndGlobalSection EndGlobal