ASP.NET WebApi自宿主模式
咱们在使用ASP.NET WebApi的时候一般习惯创建一个Web应用程序,最终程序将发布到IIS进行运行,近期公司有个需求需要在Windows服务中使用WebApi进行http监听响应,于是搜索了部分资料后整理如下,这里演示使用控制台应用程序。首先需要从Nuget引用相关类库:
<packages> <package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" targetFramework="net40" /> <package id="Microsoft.AspNet.WebApi.Core" version="4.0.20710.0" targetFramework="net40" /> <package id="Microsoft.AspNet.WebApi.SelfHost" version="4.0.30506.0" targetFramework="net40" /> <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" /> <package id="Newtonsoft.Json" version="4.5.6" targetFramework="net40" /> </packages>
注意我使用的是.net framework 4.0,所以Microsoft.AspNet.WebApi.SelfHost的版本是4.x。
然后就是C#代码如下:
class Program { static void Main(string[] args) { var config = new HttpSelfHostConfiguration("http://localhost:9100"); config.Routes.MapHttpRoute( "API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional, namespaceName = "BDCDataAR.HeNanOneWinAccept.API" }); config.Routes.MapHttpRoute( "API action", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional, namespaceName = "BDCDataAR.HeNanOneWinAccept.API" }); var server = new HttpSelfHostServer(config); server.OpenAsync().Wait(); Console.WriteLine("http监听成功"); Console.ReadKey(); } }
然后我们创建一个Api控制器如下:
public class StudentController : ApiController { [HttpGet] public string Get() { return "hello world"; } [HttpPost] public string Add(StudentPara para) { return "success"; } } public class StudentPara { public string EncryptData { get; set; } }
当我们通过浏览器请求http://localhost:9100/api/Student的时候,将返回hello world。
注意:Add方法是post请求,默认接收数据的最大长度为65536字节数,超过这个字节数将报413错误,为了解决该问题,需要对config进行设置,设置如下:
config.MaxReceivedMessageSize = 1024 * 1024;//表示1M