Skip to content

Instantly share code, notes, and snippets.

@sirkirby
Last active March 27, 2017 21:50
Show Gist options
  • Select an option

  • Save sirkirby/282161b1dd2dc97086719159ba2b4770 to your computer and use it in GitHub Desktop.

Select an option

Save sirkirby/282161b1dd2dc97086719159ba2b4770 to your computer and use it in GitHub Desktop.
scriptcs web api w/ controller that lists directory contents
using System.IO;
using System.Reflection;
using System.Web.Http;
using System.Web.Http.SelfHost;
using System.Web.Http.Dispatcher;
public class ControllerResolver : DefaultHttpControllerTypeResolver
{
public override ICollection<Type> GetControllerTypes(IAssembliesResolver assembliesResolver)
{
return Assembly.GetExecutingAssembly().GetTypes()
.Where(x => typeof(System.Web.Http.Controllers.IHttpController).IsAssignableFrom(x)).ToList();
}
}
var config = new HttpSelfHostConfiguration(new Uri("http://localhost:8090"));
config.Services.Replace(typeof(IHttpControllerTypeResolver), new ControllerResolver());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
public class FileSystemController : ApiController
{
public string[] Get(string dir = @"D:\")
{
var fileEntries = Directory.GetFiles(dir);
return fileEntries;
}
}
new HttpSelfHostServer(config).OpenAsync().Wait();
Console.WriteLine("Listening...");
Console.ReadKey();
void Main()
{
var script = new Process();
script.StartInfo.FileName = "scriptcs";
script.StartInfo.CreateNoWindow = true;
script.StartInfo.Verb = "runas";
script.StartInfo.Arguments = @"csharp-web-server-sample.csx";
script.Start();
var proxy = new Process();
proxy.StartInfo.FileName = "ngrok";
proxy.StartInfo.CreateNoWindow = true;
proxy.StartInfo.Arguments = "http 8090";
proxy.Start();
}
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
</packages>
ngrok http 8090
:: start from the cli
scriptcs -install
scriptcs csharp-web-server-sample.csx
@sirkirby
Copy link
Author

Requirements

choco install scriptcs
npm i -g ngrok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment