使用C#快速搭建Rest服务

使用C#快速搭建Rest服务,第1张

为了能够在桌面端软件中简单方便的对外提供RestApi接口,参考Java SpringMVC框架使用C#语言编写了一个简易RestApi服务器框架,目前支持

- 静态页面处理

- GET/POST/PUT/DELETE请求

- 支持返回JSON

- 支持路由方法

- 支持自定义过滤器

- 服务器返回数据支持gzip压缩

- 支持Component变量自动注入

- 支持Component自动扫描

- GET/POST支持查询参数,POST支持body数据

- 注解支持

  - Component

  - WebFilter

  - RequestMapping

  - Autowired

  - RequestBody

  - RequestParam

new RestApplicationServer().run(new RestConfiguration {

    StaticFileConfigurations = new List<StaticFileConfiguration>() {

        new StaticFileConfiguration("/e", "E:\\"),

        new StaticFileConfiguration("/f", "F:\\")

    }

})

// 将 http://xxxxx.com/e/xxxxx 映射到本地磁盘文件 E:\\xxxxx

// 将 http://xxxxx.com/f/xxxxx 映射到本地磁盘文件 F:\\xxxxx

1.添加Controller

        [Component("PersonController")]

    public class PersonController

    {

        [Autowired]

        public PersonService personService

        private ILogger logger = LoggerFactory.GetLogger()

        [RequestMapping("GET","/api/person/list")]

        public List<Person>GetPersonList()

        {

            return personService.GetPersonList()

        }

        [RequestMapping("GET", "/api/person")]

        public Person GetPerson([RequestParam("id")]int id)

        {

            logger.Debug("id:"+id)

            return personService.GetPerson((int)id)

        }

        [RequestMapping("POST", "/api/person")]

        public string Create([RequestBody] Person person)

        {

            logger.Info("person:" + person.ToString())

            return "ok"

        }

    }

2.添加Service

    [Component("PersonService")]

    public class PersonService

    {

        private ILogger logger = new ConsoleLogger()

        public List<Person>GetPersonList() {

            return TestData.PersonList

        }

        public Person GetPerson(int id)

        {

            return TestData.PersonList.Find(x =>x.id == id)

        }

        public void Create(Person person)

        {

            logger.Debug(person.ToString())

        }

    }

3.启动服务

controller和service上增加Component注解后,服务启动时会进行自动扫描

class Program

{

    static void Main(string[] args)

    {

        new RestApplicationServer().run()

    }

}

1. 添加一个计算接口处理耗时的filter

[WebFilter(1, "/")]

    public class StopWacthFilter : IFilter

    {

        public void Filter(HttpRequest request,ref HttpResponse response, ProcessChain chain, int nextIndex)

        {

            Stopwatch stopwatch = new Stopwatch()

            stopwatch.Start()

            chain.doFilter(request,ref response, nextIndex)

            stopwatch.Stop()

            Console.WriteLine(request.Method + " "+request.Path+ ", 耗时:"+(stopwatch.ElapsedMilliseconds).ToString()+"ms")

        }

    }

自定义filter上增加WebFilter注解后,服务启动时会进行自动扫描

项目地址: https://github.com/13401095975/RestServer

记录一下SpringBoot的RestApi接口的单元测试

1.使用的junit单元测试框架,所以需要加入依赖。

2.如果是jar项目,就在单元测试的类上标注下面两个注解。

3.如果是web项目,则还需要添加下面这个注解。

4.因为测试的是rest接口,所以,需要引入下面的请求发送工具(其他的也可以)。

5.因为是针对本项目,所以通常还会添加一个属性,和一个方法。

6.这样的话,当需要编写单元测试的时候,只要直接继承该类即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11561207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存