ScriptCS i szybki prototyp z WebAPI

W poniedziałek pisałem, że nie testowałem scriptcs-sublime. To się już zmieniło. Zainstalowałem i działa. Co więcej zainstalowałem drugi plugin build-with-input a to wszystko po to aby móc do skryptu przesłać coś za pomocą klawiatury bezpośrednio z poziomu samego sublime text-a.

Instalacja:

w konsoli gita teleportuję się do C:\Users\[uzytkownik]\AppData\Roaming\Sublime Text 2\Packages i wpisujemy magiczne znaki runiczne:

git clone https://github.com/scriptcs/scriptcs-sublime.git

oraz

git clone https://github.com/eric-wieser/build-with-input.git

to pobierze nam najnowsze wersje dodatków scriptcs-sublime oraz build-with-input. Narzędzie naostrzone zatem przestrzelamy sublime text-a i piszemy:

[csharp]
Console.Write("what is your name : ");
string name = Console.ReadLine();
Console.WriteLine("Hello {0}",name);
[/csharp]

w konsoli możemy teraz zapodać Enter –> wpisać tekst –> jeszcze jeden Enter i mamy działający program na poziomie początkującym początkującym.

image

Proste, zatem przejdźmy do czegoś trochę bardziej skomplikowanego. Serwer z webapi w 34 linijkach.

Uruchomimy serwer na porcie 85 (powinien być wolny). Jeśli tak samo jak ja wyznajesz, że developer nie powinien mieć uprawnień administratora lokalnego to przydzielmy sobie przestrzeń nazw za nim będzie za późno 😉 W konsoli (z uprawnieniami admina)

netsh http add urlacl http://+:85/demo/webapi user=wszyscy

Oczywiście w zależności od potrzeb modyfikujemy port, resztę linku oraz usera, na którym chcemy pracować (http://msdn.microsoft.com/en-us/library/ms733768.aspx).

Pakiety:

Potrzebujemy również kilka pakietów. W katalogu w którym zapisujemy nasz plik csx wystarczy uruchomić

scriptcs -install scriptcs.webapi

to spowoduje pobranie wszystkiego co będzie potrzebne do webapi.

Kod:

A teraz mięso czyli potrzebujemy System.Net.Http deklarujemy swój kontroler (tutaj TestController), później własny header handler, który przyda się do dodania dodatkoowych nagłówków a to po to, żebyśmy mogli konsumować to api za pomocą ajaxa z dowolnej domeny. Ostatnie 10 linijek to stworzenie serwera i to wszystko.

[csharp]
using System.Net.Http;

public class TestController : ApiController {
public string Get() {
return "Hello world!";
}
}

public class CustomHeaderHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken)
.ContinueWith((task) =>
{
HttpResponseMessage response = task.Result;
response.Headers.Add("Access-Control-Allow-Origin", "*");
response.Headers.Add("Access-Control-Allow-Methods", "GET");
response.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With");
return response;
});
}
}

var webApi = Require<WebApi>();
var config = new HttpSelfHostConfiguration("http://localhost:85/demo/webapi");
config.MessageHandlers.Add(new CustomHeaderHandler());
var server = webApi.CreateServer(config);

server.OpenAsync().Wait();

Console.WriteLine("Listening…");
Console.ReadLine();
server.CloseAsync().Wait();
[/csharp]

odpalamy koda i mamy pod adresem http://localhost:85/demo/webapi serwer, który odpowiada na geta standardowym hello world.

image

wchodzimy z przeglądarki i…

image

czyli webapi odpowiedziało xml-em.

Możemy też wysłąć requesta np z webstorma (lub fiddlera) i zassać jsona:

image

A może ajaxem:

[javascript]
$.ajax({
url:’http://localhost:85/demo/webapi/test’
}).done(function(response){
alert(response);
})
[/javascript]

image

Całkiem dobry start aby napisać jakiś model backendu w webapi i szybko zacząć prototypować html-e