winform_webApiSelfHost
窗本构造函数中添加以下代码:
var baseAddress = ConfigurationManager.AppSettings["baseAddress"]; var config = new HttpSelfHostConfiguration(baseAddress); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); var cors = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(cors); var server = new HttpSelfHostServer(config); server.OpenAsync().Wait();
App.config文件中添加以下内容:
<appSettings> <add key="baseAddress" value="http://localhost:9002" /> </appSettings>
Create an OWIN configuration handler
class Startup { // Hack from http://stackoverflow.com/a/17227764/19020 to load controllers in // another assembly. Another way to do this is to create a custom assembly resolver Type valuesControllerType = typeof(OWINTest.API.ValuesController); // This code configures Web API. The Startup class is specified as a type // parameter in the WebApp.Start method. public void Configuration(IAppBuilder appBuilder) { // Configure Web API for self-host. HttpConfiguration config = new HttpConfiguration(); // Enable attribute based routing // http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); appBuilder.UseWebApi(config); } }
Add API controllers
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Http; namespace OWINTest.Service.API { [RoutePrefix("api/testing")] public class RoutedController : ApiController { [Route("getall")] public IEnumerable<string> GetAllItems() { return new string[] { "value1", "value2" }; } } }
Add code to start/stop the WebAPI listener
public partial class APIServiceTest : ServiceBase { public string baseAddress = "http://localhost:9000/"; private IDisposable _server = null; public APIServiceTest() { InitializeComponent(); } protected override void OnStart(string[] args) { _server = WebApp.Start<Startup>(url: baseAddress); } protected override void OnStop() { if(_server != null) { _server.Dispose(); } base.OnStop(); } }
原文:http://www.cnblogs.com/xinzheng/p/5586965.html
https://github.com/danesparza/OWIN-WebAPI-Service