浏览器标题切换
浏览器标题切换end

Intern Day10 - WebAPI一个控制器controller/路由中实现多个HttpGet等方法

问题

当PatientController.cs文件中这么写的时候,会报ambiguous xxx的错误:

    [ApiController]
    [Route("[Controller]")]
    public class PatientController:ControllerBase
    {
        private readonly PatientDbContext _patientDbContext;
        public PatientController(PatientDbContext patientDbContext) 
        {
            _patientDbContext = patientDbContext;
        }

        [HttpGet]
        public List<Patient> list(string keyword, int pageIndex, int pageSize) // 在Patient路由下面
        {
            var skip=pageSize*(pageIndex-1);
            var patient = _patientDbContext.Patients
                .Where(it=>it.Name.Contains(keyword)) 
                .Skip(skip) 
                .Take(pageSize)
                .ToList();
            return patient;
        }
        
        public Patient GetDetail(int id) // 没有特别说明,默认跟随上面,在Patient这个路由下面
        {
            return _patientDbContext.Patients.Find(id);
        } 

        public Patient Add(Patient patient)         // 没有特别说明,默认跟随上面,在Patient这个路由下面
        {
            _patientDbContext.Add(patient); 
            _patientDbContext.SaveChanges(); 
            return patient;
        }
        ……
        ……

原因

在Asp.net WebApi控制器中,在同一个路由下面使用多个Post/Get等( [HttpGet] )请求报错。

因为一个控制器下面只能有一个HttpGet或其他请求,如果想要实现多个请求,我们需要去自定义路由(即标明路由是什么,之后通过每个方法不同的路由去访问请求)。

解决办法

在每个方法上面添加自定义路由,如下面代码所示:

    [ApiController]
    [Route("api/patient")]    // [Route("[Controller]")]  这两个都可以
    public class PatientController:ControllerBase
    {
        private readonly PatientDbContext _patientDbContext;
        public PatientController(PatientDbContext patientDbContext) 
        {
            _patientDbContext = patientDbContext;
        }
        
        [Route("pat0")]
        [HttpGet]
       // [HttpGet("pat0")]   上面这两行和这句话可以互换,都可以用
        public List<Patient> list(string keyword, int pageIndex, int pageSize)
        {
            var skip=pageSize*(pageIndex-1);
            var patient = _patientDbContext.Patients
                .Where(it=>it.Name.Contains(keyword)) 
                .Skip(skip)
                .Take(pageSize) 
                .ToList();
            return patient;
        }
        
        [Route("pat1")]
        [HttpGet]
        public Patient GetDetail(int id) 
        {
            return _patientDbContext.Patients.Find(id);
        } 
    ······
    ······
posted @   抓水母的派大星  阅读(669)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2020-02-27 寒假Day35:HDU3499
2020-02-27 寒假Day35:HDU1385-Minimum Transport Cost -Floyd路径输出(输出字典序小的)
点击右上角即可分享
微信分享提示