Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data.

Lignende præsentationer


Præsentationer af emnet: "WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data."— Præsentationens transcript:

1 WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data

2 Routning – reduceret med parametre Routning binder uri adressen med controler. Default giver også mulighed for positionsbestemte parametre I stedet for at kalde: api/Student?id=1 Kan man angive denne sådan: api/Student/1 Se mere her : http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-apihttp://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

3 Routning med action Hvis man har konflikter med flere metoder der har samme type og parametre (fx GET) eller blot gerne vil angive metoden kan man ændre routningen (inde i WebApiConfig.cs) til følgende: routeTemplate: "api/{controller}/{action}/{id}” Nu kan uri adressen så se sådan ud: api/student/getStudent/1 Hvor metoden i WebApi controleren Student der kaldes er GetStudent med id=1 som parameter. Se mere her : http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-apihttp://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

4 Med ActionName kan man angive at action er et andet navn end metodenavnet. Hvis man bruger standart navne Get, Put, Post og Delete som metodenavne kan det være en god idé public class StudentController : ApiController { [HttpGet] // hjælp til routning hvis metode ikke starter med Get [ActionName("GetStudentByID")] public Models.Student GetStudent (int id) { ………………………………………….. } [HttpGet] // hjælp til routning hvis metode ikke starter med Get [ActionName("GetStudentByAge")] public Models.Student[] GetStudentAge (int age) { ………………………………………….. } Se mere her : http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-apihttp://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

5 Testing WebApi with simple javascript in html file // Testing of WebApi services // Place this content in a HTML page on the website with you WebApi services // Running in Internet Explorer you might also debug it function WebApiRequest(apiUri, requestType, httpBodyTxt) { // apiUri : WebApi fx "http://localhost:35038/api/Regne?a=5&b=7" or "/api/Regne?a=5&b=7" // requestType : "GET", "POST", "PUT" or "DELETE" // httpBodyTxt : "data {'Id':2, 'Name':'My New Name'}" document.writeln(requestType + " request " + apiUri + " ") // alert(requestType + " request" + apiUri); httpReq = new XMLHttpRequest(); httpReq.onloadend = onloadend_action; // set callback function httpReq.open(requestType, apiUri, false); // here synchronous httpReq.setRequestHeader("Content-Type", "application/json"); httpReq.send(httpBodyTxt); //Async callback function function onloadend_action() { var responseTxt = httpReq.responseText; document.writeln("response: " + responseTxt+" ") // alert("response:\r\n" + responseTxt); } // Continue on next slide

6 Testing WebApi with simple javascript in html file // Continue from previous slide // main function /global - her you make your call for testing your WebApi // Insert your test for WebApi here - must be on same site as this html-script-file //Ecamples of call // WebApiRequest("http://localhost:35038/api/Regne?a=5&b=7", "GET", "json", null); WebApiRequest("api/Regne?a=5&b=7", "GET", null); document.writeln(" Begin of test 4 ") WebApiRequest("api/Student?id=1", "GET", null); document.writeln(" Begin of test 5 ") WebApiRequest("api/Student?id=1", "PUT", "{'Id':2, 'Name':'My New Name'}"); document.writeln(" End of test ")

7 Session i WebApi Som udgangspunkt bør man lade WebApi services være stateless. I forbindelse med at vi ikke ønsker at gemme i en database i undervisningen, men blot holde data i ram, kan vi dog have glæde at Session også til WebApi. Det bliver mere aktuelt når vi skal lave Web UI (MVC), men så kender du det allerede fra WebApi. Det kræver dog lige for WebApi en tilpasning i Global.asax

8 Tilgang til Session og Application objekterne For at tilgå Session og Application skal vi først have fat på HttpContext. Denne er direkte tilgængelig i WCF men i WebApi skal den hentes fra Request klassen. var httpContext = Request.Properties["MS_HttpContext"] as System.Web.HttpContextWrapper; Du har nu adgang med httpContext.Session httpContext.Application Du kan bruge Session objektet til at gemme data for den enkelte klient og Application til data fælles for alle klienterne. Begge giver mulighed for gemme data med en key. Der kræves ikke serialisering da data er i ram.

9 HttpContext var httpContext = Request.Properties["MS_HttpContext"] as System.Web.HttpContextWrapper; if (httpContext.Application != null) { try { httpContext.Application.Lock(); if (httpContext.Application["TEST"] == null) ………………………………………. } finally { httpContext.Application.UnLock(); } Hvis du skal have adgang til Application bruges HttpContext Der ikke er tilgængelig direkte i controleren, men kan tilgås som vis her. Husk at låse på Application ved tilgang og ændring. Husk UnLock i finally for at sikre det altid sker Undgå at gemme mange data direkte i Application men lav din egen klasse til disse. Fx lav en klasse for en samling objekter, hvor låsning så sker her. Således at Application låses mindst muligt. Overvej brug af Static data frem Application. Husk også at REST / Web API bør som udgangspunkt være stateless I undervisningssammenhæng vil vi dog vælge data i memory for ikke også at skulle inddrage databaser hver gang – så vi kan holde fokus


Download ppt "WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data."

Lignende præsentationer


Annoncer fra Google