Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不带属性名的Http get和post方法_C#_.net_Asp.net Core Webapi_Asp.net Core 2.1 - Fatal编程技术网

C# 不带属性名的Http get和post方法

C# 不带属性名的Http get和post方法,c#,.net,asp.net-core-webapi,asp.net-core-2.1,C#,.net,Asp.net Core Webapi,Asp.net Core 2.1,我使用的是.NETCore2.1WebAPI。我添加了每个方法[HttpGet(“…”)]或[HttpPost(“…”)],如下所示。但是,我不想在每个控制器中编写每个方法。我只想写[HttpGet]或[HttpPost]。我怎样才能做到这一点 或者,如果这是不可能的,我可以像[HttpPost(“[action]”)那样使用actionName自动执行 我是这样打电话的: 这台机器运转得很好 namespace University.API.Controllers { [Route(

我使用的是.NETCore2.1WebAPI。我添加了每个方法
[HttpGet(“…”)]
[HttpPost(“…”)]
,如下所示。但是,我不想在每个控制器中编写每个方法。我只想写
[HttpGet]
[HttpPost]
。我怎样才能做到这一点

或者,如果这是不可能的,我可以像
[HttpPost(“[action]”)那样使用actionName自动执行

我是这样打电话的:

这台机器运转得很好

namespace University.API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UniversityController : ControllerBase
    {
        private readonly IUniversityService universityService;

        public UniversityController(IUniversityService universityService)
        {
            this.universityService = universityService;
        }

        [HttpGet("GetUniversities")]
        public async Task<ServiceResult> GetUniversities()
        {
            return await universityService.GetUniversities();
        }

        [HttpGet("GetUniversityStatues")]
        public async Task<ServiceResult> GetUniversityStatues()
        {
            return await universityService.GetUniversityStatues();
        }
    }
}
namespace University.API.Controllers
{
[路由(“api/[控制器]”)]
[ApiController]
公立大学控制器:控制器数据库
{
私立只读大学服务大学服务;
公立大学管理员(大学服务大学服务)
{
this.universityService=大学服务;
}
[HttpGet(“GetUniversities”)]
公共异步任务getuniversions()
{
return wait universityService.GetUniversities();
}
[HttpGet(“GetUniversityStatues”)]
公共异步任务GetUniversityStatues()
{
return wait universityService.GetUniversityStatues();
}
}
}
我尝试过这个,但不起作用:

namespace University.API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UniversityController : ControllerBase
    {
        private readonly IUniversityService universityService;

        public UniversityController(IUniversityService universityService)
        {
            this.universityService = universityService;
        }

        [HttpGet]
        public async Task<ServiceResult> GetUniversities()
        {
            return await universityService.GetUniversities();
        }

        [HttpGet]
        public async Task<ServiceResult> GetUniversityStatues()
        {
            return await universityService.GetUniversityStatues();
        }
    }
}
namespace University.API.Controllers
{
[路由(“api/[控制器]”)]
[ApiController]
公立大学控制器:控制器数据库
{
私立只读大学服务大学服务;
公立大学管理员(大学服务大学服务)
{
this.universityService=大学服务;
}
[HttpGet]
公共异步任务getuniversions()
{
return wait universityService.GetUniversities();
}
[HttpGet]
公共异步任务GetUniversityStatues()
{
return wait universityService.GetUniversityStatues();
}
}
}

不需要用Http谓词传递方法名。您也可以这样使用:

        [HttpGet]
        public async Task<ServiceResult> GetUniversities()
        {
            return await universityService.GetUniversities();
        }
[HttpGet]
公共异步任务getuniversions()
{
return wait universityService.GetUniversities();
}
但是您想更改方法名称或路由。你可以这样做:

        [HttpGet("", Name="Students"]
        public async Task<ServiceResult> GetStudents()
        {
            return await universityService.GetStudents();
        }
[HttpGet(“,Name=“Students”]
公共异步任务GetStudents()
{
return wait universityService.GetStudents();
}

像MVC这样的Web API在配置上有约定,因此如果您没有在属性中定义端点,它将工作,但不会像您期望的那样。通常会像此API/[ControllerName]post方法一样调用Get方法

在您的情况下,如果需要将路由命名为与操作相同的名称,则可以将此属性写在控制器上方

[Route("[controller]/[action]")]

您可以只使用[HttpGet]

    [HttpGet]
    public async Task<ServiceResult> GetUniversities()
    {
        return await universityService.GetUniversities();
    }
[HttpGet]
公共异步任务getuniversions()
{
return wait universityService.GetUniversities();
}
然后向发送get请求。它将正常工作。 但你的问题是你有不止一个无参数的get方法,然后它无法识别你需要调用哪个get方法

所以,如果你真的想在同一个控制器中使用两个无参数get方法,你必须像这样装饰它

   [HttpGet("GetUniversities")]
   public async Task<ServiceResult> GetUniversities()
   {
       return await universityService.GetUniversities();
   }

   [HttpGet("GetUniversityStatues")]
   public async Task<ServiceResult> GetUniversityStatues()
   {
       return await universityService.GetUniversityStatues();
   }
[HttpGet(“getuniversions”)]
公共异步任务getuniversions()
{
return wait universityService.GetUniversities();
}
[HttpGet(“GetUniversityStatues”)]
公共异步任务GetUniversityStatues()
{
return wait universityService.GetUniversityStatues();
}

否则,您必须将第二个控制器移动到另一个控制器

您可以通过此操作将其自动化一点

[HttpPost(nameof(GetUniversities))]

您只需编写
[HttpGet]
它将自动获取操作名称。我尝试了,但它不会返回到方法。@JustCode编辑后什么不工作?您的控制台在说什么?我的控制台给出404错误@JustCode如何调用api?显示urlI尝试了[HttpGet]。但当我删除(“GetGetGet”)时它给出404错误@sandeep但我的控制器中有很多操作,比如getuniversions、GetStudent、GetUniversityStatus等。我的url如何知道去哪里?@jaffalb根据发送的参数,如果您有多个具有相同参数集的get方法,我想您调用此API时会遇到问题,这就是您需要定义路由名称的原因。我相信您不应该这样做将所有这些方法放在一个控制器中,遵循RESTful API标准,将实体作为资源处理,每个控制器负责一个资源。这在真实场景中是不可能的。因为,我认为将有超过10000个“get”在我的项目中采取行动。如果我按照你说的做,将会有超过10000个控制器。我认为,这不是件好事。你不能管理10000个控制器。@Jaffalou给我的错误不是每个get方法的控制器,而是每个实体的控制器,例如大学控制器、学生控制器、成绩控制器等。我理解。但例如,如果我们谈论大学控制器,就会有大学名称、大学状态、大学职位等等。每次都会有不止一个get或一个帖子。一个get操作在现实中是不可能的。我不知道,我说的对吗在我的真实场景@ThilinaSandunsiri.C#中,我的控制器中有100个以上的无参数“get”方法并不聪明,正如我所想:([Route(“api/[controller]/[action]”)这就是我想要的。这解决了我的问题。这样,即使有多个无参数get方法,我也可以使用无方法名。@thilinandunsiri C#是我希望的聪明:)