ASP.NET Web API Tips (Part I)
{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 :
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 :
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!
Recent Posts
- Memulai Membangun Aplikasi Desktop dengan WinForms .NET Core 3
- Seri Belajar ASP.NET: Membangun Aplikasi Real-Time dengan ASP.NET Core SignalR
- Seri Belajar Data Science: Pengenalan Azure Machine Learning Studio
- Azure Machine Learning Studio Workshop at Lampung University
- Browser + Razor = Blazor!
- ASP.NET Core Blazor Language Service
- How to Budle & Minify ASP.NET Core 2 Project using Visual Studio 2017
Recent Comments
- ASP.NET MVC 5: Prepare Model for Data Access Layer on
- ASP.NET MVC 5: Prepare Model for Data Access Layer on
- Seri Belajar ASP.NET: ASP.NET Core 2 MVC & SQL Server 2017 dengan Visual Studio 2017 on
- Seri Belajar Data Science: Pemrograman R untuk Data Scientist on
- ASP.NET Core Web API Versioning on
- ASP.NET Core Web API Versioning on
- Seri Belajar ASP.NET: ASP.NET Core 2 MVC & SQL Server 2017 dengan Visual Studio 2017 on
Fotolia
ShutterStock
Archives
- June 2019 (1)
- January 2019 (2)
- November 2018 (1)
- March 2018 (6)
- December 2017 (1)
- October 2017 (1)
- August 2017 (1)
- July 2017 (2)
- April 2017 (1)
- March 2017 (5)
- February 2017 (8)
- January 2017 (4)
- December 2016 (1)
- October 2016 (2)
- August 2016 (4)
- July 2016 (1)
- June 2016 (1)
- May 2016 (2)
- April 2016 (5)
- February 2016 (10)
- January 2016 (5)
- December 2015 (2)
- October 2015 (1)
- September 2015 (3)
- August 2015 (1)
- July 2015 (2)
- June 2015 (1)
- May 2015 (1)
- April 2015 (3)
- January 2015 (4)
- December 2014 (7)
- November 2014 (3)
- September 2014 (3)
- August 2014 (1)
- June 2014 (1)
- May 2014 (2)
- April 2014 (6)
- March 2014 (10)
- February 2014 (4)
- January 2014 (3)
- December 2013 (3)
- October 2013 (1)
- September 2013 (3)
- August 2013 (1)
- June 2013 (2)
- May 2013 (1)
- April 2013 (3)
- March 2013 (6)
- February 2013 (2)
- January 2013 (3)
- November 2012 (4)
- October 2012 (2)
- May 2012 (2)
- March 2012 (1)
- March 2011 (1)
- February 2011 (1)