有意思的OWIN,附脱离iis的webapi
程序引用
using Owin;
using Microsoft.Owin.Hosting;
新建一个控制台程序
Program
class Program { static void Main(string[] args) { // string baseAddress = "http://localhost:9000"; string baseAddress = "http://10.136.238.68:9000"; using (WebApp.Start<RESTFULTStartup>(url: baseAddress)) { //HttpClient client = new HttpClient(); Console.WriteLine(baseAddress); Console.ReadLine(); } } }
新建一个路由配置类
RESTFULTStartup
public class RESTFULTStartup { public void Configuration(IAppBuilder appBuilder) { // 创建 Web API 的配置 var config = new HttpConfiguration(); // Web API 路由 config.MapHttpAttributeRoutes(); //移除XML输出 config.Formatters.Remove(config.Formatters.XmlFormatter); // 默认的 Web API 路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // 将路由配置附加到 appBuilder appBuilder.UseWebApi(config); } }
新建一个自定义控制器类
RESController
特别说明:在控制器上标记[RoutePrefix("api/RES")] 在action方法上标记[Route("Test01")]
[RoutePrefix("api/RES")] public class RESController : ApiController { //[Route("Test01/{obj:int}")] [Route("Test01")] [HttpPost] public string Test01(dynamic obj) { StringWriter sw = new StringWriter(); try { sw.WriteLine("Test01"); sw.WriteLine("开始"); sw.WriteLine(DateTime.Now.ToString()); string requJSON = JsonConvert.SerializeObject(obj); sw.WriteLine(requJSON); sw.WriteLine("结束"); var x = new { code = "0", desc = "success" }; string jsonX = JsonConvert.SerializeObject(x); sw.WriteLine("返回值:"+ jsonX); return jsonX; } catch (Exception ex) { sw.WriteLine(ex.Message); sw.WriteLine(ex.StackTrace); throw; } finally { System.IO.File.WriteAllText("d:\\1fapi\\" + Guid.NewGuid() + ".txt", sw.ToString()); } } //[Route("Test01/{obj:int}")] [Route("Test02")] [HttpPost] public string Test02(dynamic obj) { StringWriter sw = new StringWriter(); try { sw.WriteLine("Test02"); sw.WriteLine("开始"); sw.WriteLine(DateTime.Now.ToString()); string requJSON = JsonConvert.SerializeObject(obj); sw.WriteLine(requJSON); sw.WriteLine("结束"); var x = new { code = "0", desc = "success" }; string jsonX = JsonConvert.SerializeObject(x); sw.WriteLine("返回值:" + jsonX); return jsonX; } catch (Exception ex) { sw.WriteLine(ex.Message); sw.WriteLine(ex.StackTrace); throw; } finally { System.IO.File.WriteAllText("d:\\2fapi\\" + Guid.NewGuid() + ".txt", sw.ToString()); } } }
最后运行,就可以实现webapi类似的需求