基于OWIN的WEB API承载
使用VS2013可以直接创建web api,然后承载到IIS中就可以供外部访问。但这样必须依赖于IIS,如果采用OWIN,则不再依赖,仅仅是运行了一个执行程序而已。先来看看效果图。
具体步骤如下
1.新建一个空的web项目,然后使用nuget搜索安装Microsoft.AspNet.WebApi.OwinSelfHost.具体可以参见该文http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api。
2.构建提供访问的控制器
创建ValuesParamController,注意一定要Controller作为后缀的控制器类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace WebApiOwin
{
public class ValuesParamController : ApiController
{
/// <summary>
/// 获取产品
/// </summary>
/// <param name="productId">产品ID</param>
/// <returns></returns>
public String TestProduct(Guid productId)
{
return productId.ToString();
}
/// <summary>
/// 获取产品
/// </summary>
/// <param name="productId">产品ID</param>
/// <returns></returns>
public Product GetProduct(Guid productId)
{
if (productId == null)
{
throw new Exception("缺少产品ID");
}
Product product = new Product();
product.Id = productId.ToString();
product.Name = "TEST";
return product;
}
}
public class Product
{
#region 属性
private String _id;
/// <summary>
/// 唯一标识
/// </summary>
public String Id
{
get { return _id; }
set { _id = value; }
}
private String _name = String.Empty;
/// <summary>
/// 名称
/// </summary>
public String Name
{
get { return _name; }
set { _name = value; }
}
#endregion
}
}
3.启动类
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace WebApiOwin
{
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
//HttpConfiguration config = new HttpConfiguration();
//默认的模板配置,这种配置方式只能提供http://localhost:9000/api/valuesparam的访问方式,
//该无法定位到函数的访问方式即http://localhost:9000/api/valuesparam/getproduct
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
//appBuilder.UseWebApi(config);
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",//其中action指的就是方法名,这种方式可以直接按http://localhost:9000/api/valuesparam/getproduct的方式访问
defaults: new { id = RouteParameter.Optional }//Optional表明routeTemplate中的id是可选的
);
appBuilder.UseWebApi(config);
}
}
}
注:MapHttpRote的配置方式可以参照VS创建web api默认创建的路由配置方式来配置,参见下图
using Microsoft.Owin.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace WebApiOwin
{
class Program
{
static void Main(string[] args)
{
// Start OWIN host
var server = WebApp.Start<Startup>(url: "http://localhost:9000/");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Web API listening at http://localhost:9000/");
// 程序直接访问web api
HttpClient client = new HttpClient();
var response = client.GetAsync("http://localhost:9000/api/ValuesParam/TestProduct?productId={BDCB861C-7266-4D10-BBC1-4FDD83AF58BE}").Result;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
response = client.GetAsync("http://localhost:9000/api/ValuesParam/getproduct?productId={BDCB861C-7266-4D10-BBC1-4FDD83AF58BE}").Result;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
Console.ReadLine();
}
}
}
注:ValuesParam是控制器类名去掉Controller的名称,getproduct是函数名,问号后面的是参数及数值,productId是参数名,等号后边的是参数的值。转载请注明出处

浙公网安备 33010602011771号