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

posted @   段江涛IT  阅读(949)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
历史上的今天:
2017-02-09 template.js 模版内调用外部JS方法
页脚HTML代码
点击右上角即可分享
微信分享提示