MVC - Restful API
MVC - Restful API
Search ASP.NET
Home
Web API:
Get Started
Learn
Overview Tutorials
Hosting
Videos
Downloads
Samples
Sign In | Join
Community
Forum Books
Forums
Help
Follow us on
Open Source
Hands On Labs
Build RESTful API's with ASP.NET Web
API
Hands On Lab: Build a Single Page
Application (SPA) with ASP.NET Web
API and Angular.js
Like
80
Tw eet
33
In recent years, it has become clear that HTTP is not just for serving up HTML pages. It is also a powerful
platform for building Web APIs, using a handful of verbs (GET, POST, and so forth) plus a few simple concepts
such as URIs and headers. ASP.NET Web API is a set of components that simplify HTTP programming.
Because it is built on top of the ASP.NET MVC runtime, Web API automatically handles the low-level
transport details of HTTP. At the same time, Web API naturally exposes the HTTP programming model. In
fact, one goal of Web API is to not abstract away the reality of HTTP. As a result, Web API is both flexible and
easy to extend. In this hands-on lab, you will use Web API to build a simple REST API for a contact manager
application. You will also build a client to consume the API. The REST architectural style has proven to be an
effective way to leverage HTTP - although it is certainly not the only valid approach to HTTP. The contact
manager will expose the RESTful for listing, adding and removing contacts, among others. This lab requires a
basic understanding of HTTP, REST, and assumes you have a basic working knowledge of HTML, JavaScript,
and jQuery.
Note: The ASP.NET Web site has an area dedicated to the ASP.NET Web API framework at
http://asp.net/web-api. This site will continue to provide late-breaking information, samples, and news related
to Web API, so check it frequently if you'd like to delve deeper into the art of creating custom Web API's
available to virtually any device or development framework.
ASP.NET Web API, similar to ASP.NET MVC 4, has great flexibility in terms of separating the service layer
from the controllers allowing you to use several of the available Dependency Injection frameworks fairly easy.
There is a good sample in MSDN that shows how to use Ninject for dependency injection in an ASP.NET Web
API project that you can download it from here.
All sample code and snippets are included in the Web Camps Training Kit, available at
http://go.microsoft.com/fwlink/?LinkID=248297&clcid=0x409.
Objectives
pdfcrowd.com
Prerequisites
The following is required to complete this hands-on lab:
Microsoft Visual Studio Express 2012 for Web or superior (read Appendix B for instructions on how to install
it).
Setup
Installing Code Snippets
For convenience, much of the code you will be managing along this lab is available as Visual Studio code snippets.
To install the code snippets run .\Source\Setup\CodeSnippets.vsi file.
If you are not familiar with the Visual Studio Code Snippets, and want to learn how to use them, you can refer to the
appendix from this document "Appendix A: Using Code Snippets".
Exercises
This hands-on lab includes the following exercise:
1. Exercise 1: Create a Read-Only Web API
2. Exercise 2: Create a Read/Write Web API
3. Exercise 3: Consume the Web API from an HTML Client
Note: Each exercise is accompanied by an End folder containing the resulting solution you should obtain after
completing the exercises. You can use this solution as a guide if you need additional help working through the
exercises.
Estimated time to complete this lab: 60 minutes.
pdfcrowd.com
Enter.
2. From the File menu, select New Project. Select the Visual C# | Web project type from the project type tree
view, then select the ASP.NET MVC 4 Web Application project type. Set the project's Name to
ContactManager and the Solution name to Begin, then click OK.
Using the Add Controller dialog to create a new Web API controller
4. Add the following code to the ContactController.
(Code Snippet - Web API Lab - Ex01 - Get API Method)
C#
public string[] Get()
{
return new string[]
{
"Hello",
"World"
};
}
pdfcrowd.com
5. Press F5 to debug the application. The default home page for a Web API project should appear.
Viewing the output of the Web API request in the Network view
Note: Internet Explorer 10's default behavior at this point will be to ask if the user would like to save or open the
stream resulting from the Web API call. The output will be a text file containing the JSON result of the Web
API URL call. Do not cancel the dialog in order to be able to watch the response's content through Developers
Tool window.
8. Click the Go to detailed view button to see more details about the response of this API call.
Task 3 - Creating the Contact Models and Augment the Contact Controller
In this task, you will create the controller classes in which API methods will reside.
1. Right-click the Models folder and select Add | Class... from the context menu.
pdfcrowd.com
4. In the ContactController class, select the word string in method definition of the Get method, and type the
word Contact. Once the word is typed in, an indicator will appear at the beginning of the word Contact. Either
hold down the Ctrl key and press the period (.) key or click the icon using your mouse to open up the
assistance dialog in the code editor, to automatically fill in the using directive for the Models namespace.
pdfcrowd.com
6. Press F5 to debug the web application in the browser. To view the changes made to the response output of the
API, perform the following steps.
1. Once the browser opens, press F12 if the developer tools are not open yet.
2. Click the Network tab.
3. Press the Start Capturing button.
4. Add the URL suffix /api/contact to the URL in the address bar and press the Enter key.
5. Press the Go to detailed view button.
6. Select the Response body tab. You should see a JSON string representing the serialized form of an
array of Contact instances.
Creating a class file to contain the code for the Contact Repository service layer
4. Add a using directive to the ContactRepository.cs file to include the models namespace.
C#
using ContactManager.Models;
5. Add the following highlighted code to the ContactRepository.cs file to implement GetAllContacts method.
pdfcrowd.com
8. Add the following highlighted code to the ContactController.cs class to add a private field to represent the
instance of the repository, so that the rest of the class members can make use of the service implementation.
(Code Snippet - Web API Lab - Ex01 - Contact Controller)
C#
public class ContactController : ApiController
{
private ContactRepository contactRepository;
pdfcrowd.com
public ContactController()
{
this.contactRepository = new ContactRepository();
}
...
}
9. Change the Get method so that it makes use of the contact repository service.
(Code Snippet - Web API Lab - Ex01 - Returning a list of contacts via the repository)
C#
public Contact[] Get()
{
return contactRepository.GetAllContacts();
}
pdfcrowd.com
Network view in Internet Explorer showing results of the Web API call
19. Click the Go to detailed view button.
20. Click the Response body tab. Note the JSON output of the API call, and how it represents the two contacts
retrieved by the service layer.
Viewing the JSON output from the Web API in the developer tools window
pdfcrowd.com
pdfcrowd.com
{
return (Contact[])ctx.Cache[CacheKey];
}
return new Contact[]
{
new Contact
{
Id = 0,
Name = "Placeholder"
}
};
}
Note: This example is for demonstration purposes and will use the web server's cache as a storage medium,
so that the values will be available to multiple clients simultaneously, rather than use a Session storage
mechanism or a Request storage lifetime. One could use Entity Framework, XML storage, or any other variety
in place of the web server cache.
4. Implement a new method named SaveContact to the ContactRepository class to do the work of saving a
contact. The SaveContact method should take a single Contact parameter and return a Boolean value
indicating success or failure.
(Code Snippet - Web API Lab - Ex02 - Implementing the SaveContact Method)
C#
public bool SaveContact(Contact contact)
{
var ctx = HttpContext.Current;
if (ctx != null)
{
try
{
var currentData = ((Contact[])ctx.Cache[CacheKey]).ToList();
currentData.Add(contact);
ctx.Cache[CacheKey] = currentData.ToArray();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
pdfcrowd.com
}
}
return false;
}
Task 1 - Modifying the Index View to Provide a GUI for Displaying Contacts
In this task, you will modify the default Index view of the web application to support the requirement of displaying the
list of existing contacts in an HTML browser.
1. Open Visual Studio 2012 Express for Web if it is not already open.
2. Open the Begin solution located at Source/Ex03-ConsumingWebAPI/Begin/ folder. Otherwise, you might
continue using the End solution obtained by completing the previous exercise.
1. If you opened the provided Begin solution, you will need to download some missing NuGet packages
before continue. To do this, click the Project menu and select Manage NuGet Packages.
2. In the Manage NuGet Packages dialog, click Restore in order to download missing packages.
3. Finally, build the solution by clicking Build | Build Solution.
Note: One of the advantages of using NuGet is that you don't have to ship all the libraries in your project,
reducing the project size. With NuGet Power Tools, by specifying the package versions in the Packages.config
file, you will be able to download all the required libraries the first time you run the project. This is why you will
have to run these steps after you open an existing solution from this lab.
3. Open the Index.cshtml file located at Views/Home folder.
4. Replace the HTML code within the div element with id body so that it looks like the following code.
HTML
<div id="body">
<ul id="contacts"></ul>
</div>
5. Add the following Javascript code at the bottom of the file to perform the HTTP request to the Web API.
HTML
pdfcrowd.com
@section scripts{
<script type="text/javascript">
$(function()
{
$.getJSON('/api/contact', function(contactsJsonPayload)
{
$(contactsJsonPayload).each(function(i, item)
{
$('#contacts').append('<li>' + item.Name + '</li>');
});
});
});
</script>
}
Debugging into the Web API call using Visual Studio 2012 Express for Web
10. Remove the breakpoint and press F5 or the debugging toolbar's Continue button to continue loading the view
in the browser. Once the Web API call completes you should see the contacts returned from the Web API call
displayed as list items in the browser.
Task 2 - Modifying the Index View to Provide a GUI for Creating Contacts
In this task, you will continue to modify the Index view of the MVC application. A form will be added to the HTML
page that will capture user input and send it to the Web API to create a new Contact, and a new Web API controller
pdfcrowd.com
5. Within the script element at the bottom of the document, add the following highlighted code to handle buttonclick events, which will post the data to the Web API using an HTTP POST call.
JavaScript
pdfcrowd.com
<script type="text/javascript">
...
$('#saveContact').click(function()
{
$.post("api/contact",
$("#saveContactForm").serialize(),
function(value)
{
$('#contacts').append('<li>' + value.Name + '</li>');
},
"json"
);
});
</script>
The Contact object being sent to the Web API from the client
10. Step through the method in the debugger until the response variable has been created. Upon inspection in the
Locals window in the debugger, you'll see that all the properties have been set.
pdfcrowd.com
Summary
This lab has introduced you to the new ASP.NET Web API framework and to the implementation of RESTful Web
API's using the framework. From here, you could create a new repository that facilitates data persistence using any
number of mechanisms and wire that service up rather than the simple one provided as an example in this lab. Web
API supports a number of additional features, such as enabling communication from non-HTML clients written in any
language that supports HTTP and JSON or XML. The ability to host a Web API outside of a typical web application
is also possible, as well as is the ability to create your own serialization formats.
The ASP.NET Web site has an area dedicated to the ASP.NET Web API framework at http://asp.net/web-api. This
site will continue to provide late-breaking information, samples, and news related to Web API, so check it frequently
if you'd like to delve deeper into the art of creating custom Web API's available to virtually any device or development
framework.
Using Visual Studio code snippets to insert code into your project
To add a code snippet using the mouse (C#, Visual Basic and XML)
pdfcrowd.com
Right-click where you want to insert the code snippet and select Insert Snippet
Installation progress
6. When the installation completes, click Finish.
Installation completed
7. Click Exit to close Web Platform Installer.
pdfcrowd.com
8. To open Visual Studio Express for Web, go to the Start screen and start writing "VS Express", then click on
the VS Express for Web tile.
Task 1 - Creating a New Web Site from the Windows Azure Portal
1. Go to the Windows Azure Management Portal and sign in using the Microsoft credentials associated with your
subscription.
Note: With Windows Azure you can host 10 ASP.NET Web Sites for free and then scale as your traffic grows.
You can sign up here.
pdfcrowd.com
pdfcrowd.com
button.
Confirm Changes
Validating connection
4. In the Settings page, under the Databases section, click the button next to your database connection's
textbox (i.e. DefaultConnection).
pdfcrowd.com
6. Then click OK. When prompted to create the database click Yes.
Like
80
Tw eet
33
Author Information
Web Camps Team Web Developer Camps are free, fun, no-fluff events for developers, by
developers. You learn from experts in a low-key, interactive way and then get hands-on time
to apply what youve learned. For more information on Web Camps, and to find one near
you, visit http://www.devcamps.ms/web.
Comments (0)
pdfcrowd.com
This site is managed for Microsoft by Neudesic, LLC. | 2014 Microsoft. All rights reserved.
Privacy Statement | Terms of Use | Contact Us | Advertise With Us | CMS by Umbraco | Hosted on Microsoft Azure
Feedback on ASP.NET | File Bugs | Support Lifecycle
pdfcrowd.com