zoukankan      html  css  js  c++  java
  • Intern Day10

    问题

    当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);
            } 
        ······
        ······
    
  • 相关阅读:
    友盟统计 新的集成方法
    Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"解决方法
    关于如何获取Google 官方 NavgationView中的控件的方法
    使用线程池管理线程!
    文件上传MultipartBody使用方法
    Ddos 分布式拒绝服务 (报告)
    linux+
    模型事件
    广东惠州游
    PhoneGap & Cordova 安装白皮书
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14456916.html
Copyright © 2011-2022 走看看