ASP.NET Web API Tips (Part I) | M Reza Faisal

reza

full-time(software-developer,lecturer); part-time(traveller, food-tester);

ASP.NET Web API Tips (Part I)

Sep 9, 2014 by     No Comments    Posted under: I am Software Developer

{Format Output XML atau JSON}

Sebagai informasi format outpun dari ASP.NET Web API dapat berupa format XML atau JSON, hal ini tergantung permintaan dari client yang mengakses.  Jika menggunakan web browser seperti Internet Explorer, Firefox atau Chrome. Jika pernah menggunakan web browser tersebut maka dapat kita akan dapat melihat ada perbedaan format data yang diberikan. Jika menggunakan IE biasanya output yang diberikan berupa format JSON. Sedangkan format output XML akan diberikan jika menggunakan web browser Firefox dan Chrome.

Tetapi jika tipe format output yang diinginkan pada web browser dapat ditentukan oleh user yang mengaksesnya dengan menggunakan query string dari url akses, maka kita sebagai programmer dapat menambahkan dua baris berikut ini pada file Global.asax.cs seperti pada baris ke-9 dan ke-10 di bawah ini.

   1: protected void Application_Start()

   2: {

   3:     AreaRegistration.RegisterAllAreas();

   4:     GlobalConfiguration.Configure(WebApiConfig.Register);

   5:     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

   6:     RouteConfig.RegisterRoutes(RouteTable.Routes);

   7:     BundleConfig.RegisterBundles(BundleTable.Bundles);

   8:  

   9:     GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "json", new MediaTypeHeaderValue("application/json")));

  10:     GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "xml", new MediaTypeHeaderValue("application/xml")));

  11: }

Setelah itu maka pada web browser dapat ditulis dengan sintaks berikut ini untuk mendapatkan output dengan format XML :

http://[hostname]/api/[controller-name]?type=xml

Sedangkan jika ingin mendapatkan output dengan format JSON maka digunakan format url seperti berikut ini :

http://[hostname]/api/[controller-name]?type=json

{Issue Penggunaan Relasi Model pada Entity Framework}

Bagi yang pernah menggunakan Entity Framework sebagai data access dan mempublish datanya dengan Web API maka mungkin akan bertemu masalah ini. Masalah ini biasanya terjadi ketika ada relasi antar model seperti pada gambar berikut ini :

blog01

Dan jika kita membuat controller untuk menampilkan data Jurusan dengan cara seperti berikut ini :

   1: [HttpGet]

   2: public List<Jurusan> Get()

   3: {

   4:     List<Jurusan> data = new List<Jurusan>();

   5:     try

   6:     {

   7:         AkademikDBEntities db = new AkademikDBEntities();

   8:         data = db.Jurusans.Select(p => p).ToList();

   9:     }

  10:     catch { }

  11:  

  12:     return data;

  13: }

Maka ketika controller itu diakses via web browser dapat dilihat output error seperti berikut ini :

blog02

Hal ini kemungkinan terjadi karena data pada Jurusan terkait dengan data pada Mahasiswa.

Jika hal seperti itu terjadi ada beberapa tip untuk mengatasinya. Yang pertama dengan cara melakukan modifikasi file class model yang mempunyai relasi ke model lain menjadi seperti berikut ini :

   1: namespace WebAPI.Akademik

   2: {

   3:     using Newtonsoft.Json;

   4:     using System;

   5:     using System.Collections.Generic;

   6:     

   7:     public partial class Jurusan

   8:     {

   9:         public Jurusan()

  10:         {

  11:             this.Mahasiswas = new HashSet<Mahasiswa>();

  12:         }

  13:     

  14:         public int JurusanID { get; set; }

  15:         public string NamaJurusan { get; set; }

  16:  

  17:         [JsonIgnore]

  18:         public virtual ICollection<Mahasiswa> Mahasiswas { get; set; }

  19:     }

  20: }

Pada bari ke-18 dapat dilihat relasi class model ini berlasi dengan class model Mahasiswa. Nah solusinya cukup tambahkan atribut [JsonIgnore] diatas baris tersebut. Sayangnya solusi ini hanya berlakuk jika format outputnya adalah JSON.

Nah ada cara lain melepas relasi ini, dengan cara membuat class "model salinan" dari class model Jurusan, dengan kode seperti berikut :

   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Web;

   5:  

   6: namespace WebAPI.Akademik.Controllers

   7: {

   8:     public class JurusanModel

   9:     {

  10:         public int JurusanID { set; get; }

  11:         public string NamaJurusan { set; get; }

  12:     }

  13: }

Kemudian pada controller bisa digunakan kode seperti berikut ini :

   1: [HttpGet]

   2: public List<JurusanModel> Get()

   3: {

   4:     List<JurusanModel> data = new List<JurusanModel>();

   5:     try

   6:     {

   7:         AkademikDBEntities db = new AkademikDBEntities();

   8:         var datatemp = db.Jurusans.Select(p => p).ToList();

   9:         foreach(Jurusan j in datatemp)

  10:         {

  11:             JurusanModel jm = new JurusanModel();

  12:             jm.JurusanID = j.JurusanID;

  13:             jm.NamaJurusan = j.NamaJurusan;

  14:             data.Add(jm);

  15:         }

  16:     }

  17:     catch { }

  18:  

  19:     return data;

  20: }

Dengan cara ini maka issue di atas dapat diatasi dan mampu mengeluarkan output dengan format XML dan JSON.

Semoga bermanfaat.

Got anything to say? Go ahead and leave a comment!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Fotolia

Fotolia

ShutterStock


Fotolia
© 2013 eSevens
%d bloggers like this: