Nowadays, many people are talking about Web API and some developers came to me and ask for sample code about how to call an ASP.NET Web API by using the HttpClient class library. Today, I want to share how to send HTTP GET, POST, PUT and DELETE to the ASP.NET Web API from a web page that perform simple CRUD operation.
I have created a very simple address book web application that can display and manipulate the data from the Web API. To begin with the ASP.NET Web API development, create a new empty web project from Visual Studio.
Select the Empty template, as I want to create the latest Web API (version 2.2) by getting the latest assembly from NuGet later.
From the newly created project, open NuGet Package Manager, then search for Microsoft ASP.NET Web API 2.2, then install it.
As I am using the Map HTTP Attribute Routes method to define my routes, therefore, create the class WebApiConfig as follow:
In the same project, add new Global.asax file if not exist. Then, at the Application_Start event, add this line of code:
[RoutePrefix("api/AddressBook")] attribute is used to create a template URL for your API. As the example above, the Web API URL is base at http://localhost:<port>/api/AddressBook
[Route] attribute is used to make an URL that base on the URL defined in RoutePrefix attribute which link to the particular method directly. For this case, I never specify any named parameter to the Route attribute, hence the URL to call this web function is the same, which is http://localhost:<port>/api/AddressBook. The incoming request will route to the correct function base on the supplied HTTP Verb.
[Route("{id:int}")] has specified named parameter. This attribute will route the request URL that contain parameter with integer type to that particular function. In this case, the URL that will hit that function is http://localhost:<port>/api/AddressBook/5
I have created a very simple address book web application that can display and manipulate the data from the Web API. To begin with the ASP.NET Web API development, create a new empty web project from Visual Studio.
Select the Empty template, as I want to create the latest Web API (version 2.2) by getting the latest assembly from NuGet later.
From the newly created project, open NuGet Package Manager, then search for Microsoft ASP.NET Web API 2.2, then install it.
As I am using the Map HTTP Attribute Routes method to define my routes, therefore, create the class WebApiConfig as follow:
public class WebApiConfig
{
public static void
Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
}
}
In the same project, add new Global.asax file if not exist. Then, at the Application_Start event, add this line of code:
GlobalConfiguration.Configure(WebApiConfig.Register);
Service
Now, proceed to create a new controller that support Get, List, Create, Update and Delete function by using HttpGet, HttpPost, HttpPut and HttpDelete attributes like following code:
[RoutePrefix("api/AddressBook")]
public class AddressBookController
: ApiController
{
// GET api/<controller>
[Route]
[HttpGet]
public List<AddressBook>
Get()
{
AddressBookComponent
bc = new AddressBookComponent();
return
bc.List();
}
// GET api/<controller>/5
[Route("{id:int}")]
[HttpGet]
public AddressBook
Get(int id)
{
AddressBookComponent
bc = new AddressBookComponent();
return
bc.Get(id);
}
// POST
api/<controller>
[Route]
[HttpPost]
public void
Create(AddressBook addressBook)
{
AddressBookComponent
bc = new AddressBookComponent();
bc.Create(addressBook);
}
// PUT
api/<controller>/5
[Route("{id:int}")]
[HttpPut]
public void
Put(int id, AddressBook
addressBook)
{
AddressBookComponent
bc = new AddressBookComponent();
bc.Update(addressBook);
}
// DELETE
api/<controller>/5
[Route("{id:int}")]
[HttpDelete]
public void
Delete(int id)
{
AddressBookComponent
bc = new AddressBookComponent();
bc.Delete(id);
}
}
[RoutePrefix("api/AddressBook")] attribute is used to create a template URL for your API. As the example above, the Web API URL is base at http://localhost:<port>/api/AddressBook
[Route] attribute is used to make an URL that base on the URL defined in RoutePrefix attribute which link to the particular method directly. For this case, I never specify any named parameter to the Route attribute, hence the URL to call this web function is the same, which is http://localhost:<port>/api/AddressBook. The incoming request will route to the correct function base on the supplied HTTP Verb.
[Route("{id:int}")] has specified named parameter. This attribute will route the request URL that contain parameter with integer type to that particular function. In this case, the URL that will hit that function is http://localhost:<port>/api/AddressBook/5
[Route("{id:int}")]
[HttpPut]
public void Put(int id, AddressBook addressBook)
Note that the above HTTP PUT method contain 2 parameters, one is the ID and another is the object. This is the standard PUT method declaration. If you have the method without the ID parameter, you will get HTTP 405 Method Not Allowed error because it will treat it as POST even you had specified HttpPut attribute.Client
Now, start to create the client that will consume the above Web API. The Web API can only support JSON and XML HTTP content type, and I pick JSON for light weight payload and it is the commonly used format nowadays. We just need to make sure the HTTP request that sent to the Web API contain the content-type : application/json in the HTTP header. And to do that, I use HttpClient class which comes from the Microsoft ASP.NET Web API 2.2 Client Libraries. You can obtain it from NuGet:
In today's topic, I will also cover about how to use model binding in grid view (ASP.NET Web Form not MVC).
In today's topic, I will also cover about how to use model binding in grid view (ASP.NET Web Form not MVC).
NOTE: Before you begin, I expect that you already had an entity or object which defined as a model.
Create a new ASP.NET web form project, then create a new page. Put a grid view in the page, then define the grid view like this:
<asp:GridView ID="addressBookGrid" runat="server"
ItemType="AddressBookSample.Entities.AddressBook"
SelectMethod="addressBookGrid_GetData"
UpdateMethod="addressBookGrid_UpdateItem"
DeleteMethod="addressBookGrid_DeleteItem"
DataKeyNames="ID">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
</Columns>
</asp:GridView>
First, put the model as the ItemType. Then, define the SelectMethod, UpdateMethod and DeleteMethod, when you do it, Visual Studio will automatically suggest, create and map the events for you. Put the model property name in the DataKeyNames which you think it is unique and can be an identifier for your object.
HTTP GET
The following is the implementation for the SelectMethod. It will send HTTP GET request to the Web API, then bind the responded data into the grid view automatically.
public IQueryable<AddressBook>
addressBookGrid_GetData()
{
HttpClient
client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:5593");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage
response = client.GetAsync("api/AddressBook").Result;
response.EnsureSuccessStatusCode();
List<AddressBook>
addressBooks = response.Content.ReadAsAsync<List<AddressBook>>().Result;
return
addressBooks.AsQueryable();
}
HTTP POST
The following is the implementation for a Create button. I have a form with text boxes and the Create button to let user enter the information that will be sent to the Web API.
That's it for a simple CRUD web application that deal with Web API. If you are interested with my source code, feel free to download it from HERE.
protected void
btnCreate_Click(object sender, EventArgs
e)
{
AddressBook
addressBook = new AddressBook()
{
ID = Convert.ToInt32(createID.Text),
FirstName = createFirstName.Text,
LastName = createLastName.Text,
Contact = createContact.Text
};
HttpClient
client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:5593");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage
response = client.PostAsync<AddressBook>("api/AddressBook",
addressBook, new JsonMediaTypeFormatter()).Result;
response.EnsureSuccessStatusCode();
}
HTTP PUT
The following is the implementation for the UpdateMethod. The method will automatically have the id parameter value which you had selected from the grid view, the code will send HTTP GET request to the Web API to retrieve the specific object first, then update the object, finally send the object with HTTP PUT request to the Web API.
public void
addressBookGrid_UpdateItem(int id)
{
HttpClient
client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:5593");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage
response = client.GetAsync("api/AddressBook/"
+ id).Result;
response.EnsureSuccessStatusCode();
AddressBook
item = response.Content.ReadAsAsync<AddressBook>().Result;
// Load the item here, e.g.
item = MyDataLayer.Find(id);
if
(item == null)
{
// The item wasn't found
ModelState.AddModelError("",
String.Format("Item with id
{0} was not found", id));
return;
}
TryUpdateModel(item);
if
(ModelState.IsValid)
{
// Save changes here, e.g.
MyDataLayer.SaveChanges();
HttpResponseMessage
updateResponse = client.PutAsync<AddressBook>("api/AddressBook/"
+ id, item, new JsonMediaTypeFormatter()).Result;
response.EnsureSuccessStatusCode();
}
}
HTTP DELETE
The following is the DeleteMethod implementation. The method will also automatically have the ID parameter value which you had selected from the grid view, just simply send the ID with HTTP DELETE request to the Web API as follow:
public void
addressBookGrid_DeleteItem(int id)
{
HttpClient
client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:5593");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage
response = client.DeleteAsync("api/AddressBook/"
+ id).Result;
response.EnsureSuccessStatusCode();
}
That's it for a simple CRUD web application that deal with Web API. If you are interested with my source code, feel free to download it from HERE.
Very nicely and methodically written article. This article is one of the few very articles on Web API I'll recommend to anyone. @nazik_huq
ReplyDeleteThanks for sharing Good Information
ReplyDelete.Net Online Training Hyderabad
mmorpg oyunlar
ReplyDeleteinstagram takipçi satın al
tiktok jeton hilesi
TİKTOK JETON HİLESİ
antalya saç ekimi
İNSTAGRAM TAKİPÇİ SATIN AL
takipci satın al
metin pvp
instagram takipçi satın al
perde modelleri
ReplyDeleteMOBİL ONAY
VODAFONE MOBİL ÖDEME BOZDURMA
NFTNASİLALİNİR
ANKARA EVDEN EVE NAKLİYAT
Trafik sigortası
DEDEKTOR
web site kurma
aşk kitapları
üsküdar toshiba klima servisi
ReplyDeletependik lg klima servisi
pendik daikin klima servisi
tuzla toshiba klima servisi
çekmeköy lg klima servisi
ataşehir lg klima servisi
çekmeköy alarko carrier klima servisi
ataşehir alarko carrier klima servisi
çekmeköy daikin klima servisi
minecraft premium
ReplyDeleteen son çıkan perde modelleri
lisans satın al
yurtdışı kargo
en son çıkan perde modelleri
nft nasıl alınır
uc satın al
özel ambulans
Congratulations on your article, it was very helpful and successful. 52a2b84eabe759accc5bc70a5f6fc446
ReplyDeletewebsite kurma
sms onay
numara onay
Thank you for your explanation, very good content. c0d299e73f0aeeb1e3bb2a559609eacc
ReplyDeletedefine dedektörü
Thanks for your article. 8f42ba8ce9d883a8f19f4e73fd8e9b49
ReplyDeleteevden iş imkanı
Good content. You write beautiful things.
ReplyDeletesportsbet
korsan taksi
mrbahis
vbet
mrbahis
taksi
hacklink
hacklink
vbet
Good text Write good content success. Thank you
ReplyDeletebetpark
poker siteleri
slot siteleri
kibris bahis siteleri
kralbet
mobil ödeme bahis
betmatik
tipobet
شركة عزل اسطح بجدة
ReplyDeleteشركة مكافحة حشرات بجدة
adana
ReplyDeletedijital kartvizit
ReplyDeletereferans kimliği nedir
binance referans kodu
referans kimliği nedir
bitcoin nasıl alınır
resimli magnet
EWLX
hatay
ReplyDeletekars
mardin
samsun
urfa
F3PER
hatay
ReplyDeletetunceli
amasya
manisa
ağrı
RV7V17
التخلص من رائحة المجاري في الحمام VdTsg1F4yY
ReplyDelete