SlideShare a Scribd company logo
ASP.NET Web API
Contents
 What & Why ASP.NET Web API
 A look at Rest & Soap
 Basic Web API Structure
 Web API Routing & Actions
 Validation
 Odata
 Content Negotiation
 Http Client
ASP.NET Web API
 ASP.NET Web API is a framework for building http
based services in top of .net framework.
 WCF  Care about transport flexibility.
 WebAPI  Care about HTTP
Build Richer Apps
Reach More Clients
 Reach more clients
 Client appropriate format
 Embrace http
 Use http as an application protocol
 Amazon has both Rest and Soap based services
and 85% of the usage is Rest based.
ASP.NET Web API
 SOAP
 A specification
 Rest
 A set of architectural principal
 Resource Oriented Architecture
 Resources
 Their names(URIs)
 Uniform Intercace
ASP.NET Web API
ASP.NET Web API
 Asmx
 Ws*
 Wcf
 Wcf 3.5
 Wcf rest starter kit
 Wcf Rest service
 ASP.Net Web API
Web API - 1 slide
public class ValueController : ApiController
{
// GET <controller>
public string Get()
{
return "Demo result at " + DateTime.Now.ToString();
}
}
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configuration.Routes.Add("default",
new HttpRoute("{controller}"));
}
Demo
Microsoft
/web
®
Sample Read-only Model and Controller
Microsoft
/web
®
Read-only Controller Actions to return data
Microsoft
/web
®
Routing a Web API Using Global.asax.cs
Routing and Actions
 Web API uses the HTTP method, not the URI path,
to select the action.
 To determine which action to invoke, the framework
uses a routing table.
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
 If no route matches, the client receives a 404 error.
 Custom name mapping to http actions.
[HttpGet]
public Product FindProduct(id) {}
 or can override the action name by using
the ActionName attribute.
 api/products/thumbnail/id
[HttpGet]
[ActionName("Thumbnail")]
public HttpResponseMessage
GetThumbnailImage(int id);
 To prevent a method from getting invoked as an
action, use the NonAction attribute.
// Not an action method.
[NonAction]
public string GetPrivateData() { ... }
Exception Handling
 By default, most exceptions are translated into an HTTP response
with status code 500, Internal Server Error.
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
var resp = new
HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID
= {0}", id)),
}
throw new HttpResponseException(resp);
}
return item;
}
 HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
Date: Thu, 09 Aug 2012 23:27:18 GMT
Content-Length: 51
{
"Message": “No product with id = 12 not found"
}
 You can customize how Web API handles exceptions by
writing an exception filter.
public class NotImplExceptionFilterAttribute :
ExceptionFilterAttribute
{
public override void
OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotImplementedException)
{
context.Response = new
HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
There are several ways to register a Web API
exception filter:
 By action
 By controller
 Globally
[NotImplExceptionFilter]
GlobalConfiguration.Configuration.Filters.Add(
new
ProductStore.NotImplExceptionFilterAttribute());
Validation
 public class Product
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public decimal Price { get; set; }
[Range(0,999)]
public double Weight { get; set; }
}
 if (ModelState.IsValid)
{
return new
HttpResponseMessage(HttpStatusCode.OK);
}
else
{
return new
HttpResponseMessage(HttpStatusCode.BadReques
t);
}
 public class ModelValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
var errors = new Dictionary<string, IEnumerable<string>>();
foreach (KeyValuePair<string, ModelState> keyValue in
actionContext.ModelState)
{
errors[keyValue.Key] = keyValue.Value.Errors.Select(e =>
e.ErrorMessage);
}
actionContext.Response =
actionContext.Request.CreateResponse(HttpStatusCode.BadReq
uest, errors);
}
}
}
 HTTP/1.1 400 Bad Request
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 20 Jul 2012 21:42:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 239
Connection: Close
{
"product": [
"Required property 'Name' not found in JSON. Line 1, position 18."
],
"product.Name": [
"The Name field is required."
],
"product.Weight": [
"The field Weight must be between 0 and 999."
]
}
 GlobalConfiguration.Configuration.Filters.Add(new
ModelValidationFilterAttribute());
 [ModelValidationFilter]
 public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
[JsonIgnore]
public int ProductCode { get; set; } // omitted
}
 [DataContract]
public class Product
{
[DataMember]
public string Name { get; set; }
[DataMember]
public decimal Price { get; set; }
public int ProductCode { get; set; } // omitted by
default
}
OData
http://localhost/Products?$orderby=Name
The EnableQuerySupport method enables query
options gloablly for any controller action that
returns anIQueryable type.
 To enable only for specific action/controller
[Queryable]
IQueryable<Product> Get() {}
Option Description
$filter
Filters the results, based on a Boolean
condition.
$inlinecount
Tells the server to include the total count
of matching entities in the response.
(Useful for server-side paging.)
$orderby Sorts the results.
$skip Skips the first n results.
$top Returns only the first n the results.
:
 http://localhost/odata/Products?$orderby=Category,
Price desc
[Queryable(PageSize=10)]
public IQueryable<Product> Get()
{
return products.AsQueryable();
}
[Queryable(AllowedQueryOptions=
AllowedQueryOptions.Skip |
AllowedQueryOptions.Top)]
Demo
Content Negotiation
 The process of selecting the best representation for
a given response when there are multiple
representations available.
 Accept:
 Accept-Charset:
 Accept-Language:
 Accept-Encoding:
HttpClient
 HttpClient is a modern HTTP client for ASP.NET Web
API. It provides a flexible and extensible API for
accessing all things exposed through HTTP.
 HttpClient is the main class for sending and
receiving HttpRequestMessages and
HttpResponseMessages.
 Task based pattern
 Same HttpClient instance can be used for multiple
URIs even from different domains.
Demo
Self Reading
 Authentication and Authorization
 Extensibility
 Tracing and Debugging
Thanks

More Related Content

What's hot (20)

PPT
Introduction to the Web API
Brad Genereaux
 
PDF
REST APIs with Spring
Joshua Long
 
PPT
Understanding REST
Nitin Pande
 
PDF
What is REST API? REST API Concepts and Examples | Edureka
Edureka!
 
PPTX
Node.js Express
Eyal Vardi
 
PDF
Angular - Chapter 7 - HTTP Services
WebStackAcademy
 
PPTX
Soap web service
NITT, KAMK
 
PDF
Angular - Chapter 4 - Data and Event Handling
WebStackAcademy
 
PPTX
Restful web services ppt
OECLIB Odisha Electronics Control Library
 
PPTX
What is an API?
Muhammad Zuhdi
 
PPTX
HTTP request and response
Sahil Agarwal
 
PDF
SOAP-based Web Services
Katrien Verbert
 
PPTX
Angular Data Binding
Jennifer Estrada
 
PDF
Spring Security
Knoldus Inc.
 
PDF
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
PDF
Use Node.js to create a REST API
Fabien Vauchelles
 
PPTX
RESTful API - Best Practices
Tricode (part of Dept)
 
PDF
JavaScript - Chapter 15 - Debugging Techniques
WebStackAcademy
 
PPTX
REST-API introduction for developers
Patrick Savalle
 
PDF
Spring Framework - MVC
Dzmitry Naskou
 
Introduction to the Web API
Brad Genereaux
 
REST APIs with Spring
Joshua Long
 
Understanding REST
Nitin Pande
 
What is REST API? REST API Concepts and Examples | Edureka
Edureka!
 
Node.js Express
Eyal Vardi
 
Angular - Chapter 7 - HTTP Services
WebStackAcademy
 
Soap web service
NITT, KAMK
 
Angular - Chapter 4 - Data and Event Handling
WebStackAcademy
 
What is an API?
Muhammad Zuhdi
 
HTTP request and response
Sahil Agarwal
 
SOAP-based Web Services
Katrien Verbert
 
Angular Data Binding
Jennifer Estrada
 
Spring Security
Knoldus Inc.
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Use Node.js to create a REST API
Fabien Vauchelles
 
RESTful API - Best Practices
Tricode (part of Dept)
 
JavaScript - Chapter 15 - Debugging Techniques
WebStackAcademy
 
REST-API introduction for developers
Patrick Savalle
 
Spring Framework - MVC
Dzmitry Naskou
 

Viewers also liked (18)

PPTX
The ASP.NET Web API for Beginners
Kevin Hazzard
 
PPT
Nnnnnn
nautami
 
PPTX
ASP.NET Web API and HTTP Fundamentals
Ido Flatow
 
PPTX
Ch 7 data binding
Madhuri Kavade
 
PDF
C# ASP.NET WEB API APPLICATION DEVELOPMENT
Dr. Awase Khirni Syed
 
PPSX
ASP.NET Web form
Md. Mahedee Hasan
 
PPTX
data controls in asp.net
subakrish
 
PPT
Asp.net basic
Neelesh Shukla
 
PPT
Asp.net
Dinesh kumar
 
PPT
Data controls ppt
Iblesoft
 
PPTX
ASP.NET Presentation
dimuthu22
 
PPT
Server Controls of ASP.Net
Hitesh Santani
 
PPT
Concepts of Asp.Net
vidyamittal
 
PPTX
Asp.NET Validation controls
Guddu gupta
 
PPT
ASP.NET 10 - Data Controls
Randy Connolly
 
PPTX
Web forms in ASP.net
Madhuri Kavade
 
PPT
ASP.NET Tutorial - Presentation 1
Kumar S
 
PPTX
Introduction to asp.net
Melick Baranasooriya
 
The ASP.NET Web API for Beginners
Kevin Hazzard
 
Nnnnnn
nautami
 
ASP.NET Web API and HTTP Fundamentals
Ido Flatow
 
Ch 7 data binding
Madhuri Kavade
 
C# ASP.NET WEB API APPLICATION DEVELOPMENT
Dr. Awase Khirni Syed
 
ASP.NET Web form
Md. Mahedee Hasan
 
data controls in asp.net
subakrish
 
Asp.net basic
Neelesh Shukla
 
Asp.net
Dinesh kumar
 
Data controls ppt
Iblesoft
 
ASP.NET Presentation
dimuthu22
 
Server Controls of ASP.Net
Hitesh Santani
 
Concepts of Asp.Net
vidyamittal
 
Asp.NET Validation controls
Guddu gupta
 
ASP.NET 10 - Data Controls
Randy Connolly
 
Web forms in ASP.net
Madhuri Kavade
 
ASP.NET Tutorial - Presentation 1
Kumar S
 
Introduction to asp.net
Melick Baranasooriya
 
Ad

Similar to ASP.NET Web API (20)

PPTX
Web api
udaiappa
 
PPTX
The Full Power of ASP.NET Web API
Eyal Vardi
 
PPTX
How to get full power from WebApi
Raffaele Rialdi
 
PDF
ASP.NET Web API Interview Questions By Scholarhat
Scholarhat
 
PDF
RESTfulDay9
Akhil Mittal
 
PPTX
Will be an introduction to
Sayed Ahmed
 
PPTX
ASP.NET Mvc 4 web api
Tiago Knoch
 
PPTX
ASP.NET - Building Web Application..in the right way!
Commit Software Sh.p.k.
 
PPTX
ASP.NET - Building Web Application..in the right way!
Fioriela Bego
 
PPTX
New features of Minimal APIs in .NET 7 -Muralidharan Deenathayalan.pptx
Muralidharan Deenathayalan
 
PDF
Web Api 2.X - Lattanzi
Codemotion
 
PPTX
ASP.NET WEB API Training
Chalermpon Areepong
 
PPTX
Codemotion Rome 2014
Ugo Lattanzi
 
PDF
Great webapis
Rafał Hryniewski
 
PPTX
Basics Of Introduction to ASP.NET Core.pptx
1rajeev1mishra
 
PPTX
RESTful API Design Best Practices Using ASP.NET Web API
💻 Spencer Schneidenbach
 
PPTX
Web API with ASP.NET MVC by Software development company in india
iFour Institute - Sustainable Learning
 
PPTX
Implementation web api
Zeeshan Ahmed Khalil
 
PPTX
Wcf rest api introduction
Himanshu Desai
 
PPTX
REST Api Tips and Tricks
Maksym Bruner
 
Web api
udaiappa
 
The Full Power of ASP.NET Web API
Eyal Vardi
 
How to get full power from WebApi
Raffaele Rialdi
 
ASP.NET Web API Interview Questions By Scholarhat
Scholarhat
 
RESTfulDay9
Akhil Mittal
 
Will be an introduction to
Sayed Ahmed
 
ASP.NET Mvc 4 web api
Tiago Knoch
 
ASP.NET - Building Web Application..in the right way!
Commit Software Sh.p.k.
 
ASP.NET - Building Web Application..in the right way!
Fioriela Bego
 
New features of Minimal APIs in .NET 7 -Muralidharan Deenathayalan.pptx
Muralidharan Deenathayalan
 
Web Api 2.X - Lattanzi
Codemotion
 
ASP.NET WEB API Training
Chalermpon Areepong
 
Codemotion Rome 2014
Ugo Lattanzi
 
Great webapis
Rafał Hryniewski
 
Basics Of Introduction to ASP.NET Core.pptx
1rajeev1mishra
 
RESTful API Design Best Practices Using ASP.NET Web API
💻 Spencer Schneidenbach
 
Web API with ASP.NET MVC by Software development company in india
iFour Institute - Sustainable Learning
 
Implementation web api
Zeeshan Ahmed Khalil
 
Wcf rest api introduction
Himanshu Desai
 
REST Api Tips and Tricks
Maksym Bruner
 
Ad

Recently uploaded (20)

PDF
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
PDF
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
PDF
Understanding AI Optimization AIO, LLMO, and GEO
CoDigital
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
Quantum Threats Are Closer Than You Think – Act Now to Stay Secure
WSO2
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
PPTX
2025 HackRedCon Cyber Career Paths.pptx Scott Stanton
Scott Stanton
 
PDF
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
PDF
5 Things to Consider When Deploying AI in Your Enterprise
Safe Software
 
PDF
Java 25 and Beyond - A Roadmap of Innovations
Ana-Maria Mihalceanu
 
PPTX
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
PDF
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
PDF
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Poster...
Michele Kryston
 
PDF
Bridging CAD, IBM TRIRIGA & GIS with FME: The Portland Public Schools Case
Safe Software
 
PDF
Why aren't you using FME Flow's CPU Time?
Safe Software
 
PPTX
Mastering Authorization: Integrating Authentication and Authorization Data in...
Hitachi, Ltd. OSS Solution Center.
 
PDF
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
PDF
Kubernetes - Architecture & Components.pdf
geethak285
 
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
Understanding AI Optimization AIO, LLMO, and GEO
CoDigital
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Quantum Threats Are Closer Than You Think – Act Now to Stay Secure
WSO2
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
2025 HackRedCon Cyber Career Paths.pptx Scott Stanton
Scott Stanton
 
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
5 Things to Consider When Deploying AI in Your Enterprise
Safe Software
 
Java 25 and Beyond - A Roadmap of Innovations
Ana-Maria Mihalceanu
 
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Poster...
Michele Kryston
 
Bridging CAD, IBM TRIRIGA & GIS with FME: The Portland Public Schools Case
Safe Software
 
Why aren't you using FME Flow's CPU Time?
Safe Software
 
Mastering Authorization: Integrating Authentication and Authorization Data in...
Hitachi, Ltd. OSS Solution Center.
 
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
Kubernetes - Architecture & Components.pdf
geethak285
 

ASP.NET Web API

  • 2. Contents  What & Why ASP.NET Web API  A look at Rest & Soap  Basic Web API Structure  Web API Routing & Actions  Validation  Odata  Content Negotiation  Http Client
  • 3. ASP.NET Web API  ASP.NET Web API is a framework for building http based services in top of .net framework.  WCF  Care about transport flexibility.  WebAPI  Care about HTTP
  • 4. Build Richer Apps Reach More Clients
  • 5.  Reach more clients  Client appropriate format  Embrace http  Use http as an application protocol  Amazon has both Rest and Soap based services and 85% of the usage is Rest based.
  • 7.  SOAP  A specification  Rest  A set of architectural principal  Resource Oriented Architecture  Resources  Their names(URIs)  Uniform Intercace
  • 10.  Asmx  Ws*  Wcf  Wcf 3.5  Wcf rest starter kit  Wcf Rest service  ASP.Net Web API
  • 11. Web API - 1 slide public class ValueController : ApiController { // GET <controller> public string Get() { return "Demo result at " + DateTime.Now.ToString(); } } protected void Application_Start(object sender, EventArgs e) { GlobalConfiguration.Configuration.Routes.Add("default", new HttpRoute("{controller}")); }
  • 12. Demo
  • 15. Microsoft /web ® Routing a Web API Using Global.asax.cs
  • 16. Routing and Actions  Web API uses the HTTP method, not the URI path, to select the action.  To determine which action to invoke, the framework uses a routing table. routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
  • 17.  If no route matches, the client receives a 404 error.  Custom name mapping to http actions. [HttpGet] public Product FindProduct(id) {}
  • 18.  or can override the action name by using the ActionName attribute.  api/products/thumbnail/id [HttpGet] [ActionName("Thumbnail")] public HttpResponseMessage GetThumbnailImage(int id);
  • 19.  To prevent a method from getting invoked as an action, use the NonAction attribute. // Not an action method. [NonAction] public string GetPrivateData() { ... }
  • 20. Exception Handling  By default, most exceptions are translated into an HTTP response with status code 500, Internal Server Error. public Product GetProduct(int id) { Product item = repository.Get(id); if (item == null) { var resp = new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent(string.Format("No product with ID = {0}", id)), } throw new HttpResponseException(resp); } return item; }
  • 21.  HTTP/1.1 404 Not Found Content-Type: application/json; charset=utf-8 Date: Thu, 09 Aug 2012 23:27:18 GMT Content-Length: 51 { "Message": “No product with id = 12 not found" }
  • 22.  You can customize how Web API handles exceptions by writing an exception filter. public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { if (context.Exception is NotImplementedException) { context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); } } }
  • 23. There are several ways to register a Web API exception filter:  By action  By controller  Globally [NotImplExceptionFilter] GlobalConfiguration.Configuration.Filters.Add( new ProductStore.NotImplExceptionFilterAttribute());
  • 24. Validation  public class Product { public int Id { get; set; } [Required] public string Name { get; set; } public decimal Price { get; set; } [Range(0,999)] public double Weight { get; set; } }
  • 25.  if (ModelState.IsValid) { return new HttpResponseMessage(HttpStatusCode.OK); } else { return new HttpResponseMessage(HttpStatusCode.BadReques t); }
  • 26.  public class ModelValidationFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { if (actionContext.ModelState.IsValid == false) { var errors = new Dictionary<string, IEnumerable<string>>(); foreach (KeyValuePair<string, ModelState> keyValue in actionContext.ModelState) { errors[keyValue.Key] = keyValue.Value.Errors.Select(e => e.ErrorMessage); } actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadReq uest, errors); } } }
  • 27.  HTTP/1.1 400 Bad Request Server: ASP.NET Development Server/10.0.0.0 Date: Fri, 20 Jul 2012 21:42:18 GMT Content-Type: application/json; charset=utf-8 Content-Length: 239 Connection: Close { "product": [ "Required property 'Name' not found in JSON. Line 1, position 18." ], "product.Name": [ "The Name field is required." ], "product.Weight": [ "The field Weight must be between 0 and 999." ] }
  • 29.  public class Product { public string Name { get; set; } public decimal Price { get; set; } [JsonIgnore] public int ProductCode { get; set; } // omitted }
  • 30.  [DataContract] public class Product { [DataMember] public string Name { get; set; } [DataMember] public decimal Price { get; set; } public int ProductCode { get; set; } // omitted by default }
  • 31. OData http://localhost/Products?$orderby=Name The EnableQuerySupport method enables query options gloablly for any controller action that returns anIQueryable type.  To enable only for specific action/controller [Queryable] IQueryable<Product> Get() {}
  • 32. Option Description $filter Filters the results, based on a Boolean condition. $inlinecount Tells the server to include the total count of matching entities in the response. (Useful for server-side paging.) $orderby Sorts the results. $skip Skips the first n results. $top Returns only the first n the results. :
  • 33.  http://localhost/odata/Products?$orderby=Category, Price desc [Queryable(PageSize=10)] public IQueryable<Product> Get() { return products.AsQueryable(); } [Queryable(AllowedQueryOptions= AllowedQueryOptions.Skip | AllowedQueryOptions.Top)]
  • 34. Demo
  • 35. Content Negotiation  The process of selecting the best representation for a given response when there are multiple representations available.  Accept:  Accept-Charset:  Accept-Language:  Accept-Encoding:
  • 36. HttpClient  HttpClient is a modern HTTP client for ASP.NET Web API. It provides a flexible and extensible API for accessing all things exposed through HTTP.  HttpClient is the main class for sending and receiving HttpRequestMessages and HttpResponseMessages.  Task based pattern  Same HttpClient instance can be used for multiple URIs even from different domains.
  • 37. Demo
  • 38. Self Reading  Authentication and Authorization  Extensibility  Tracing and Debugging