C# 不带属性名的Http get和post方法
我使用的是.NETCore2.1WebAPI。我添加了每个方法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(
[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#是我希望的聪明:)