我正在使用.net Core 2.1 Web API。我如下添加每个方法[HttpGet("....")]
或[HttpPost("....")]
。但是,我不想在每个控制器中编写每个方法。我只想写[HttpGet]
或[HttpPost]
。我该如何实现?
或者,如果不可能的话,我可以像[HttpPost("[action]")]
那样自动采取actionName吗?
我这样打电话: http://localhost:5000/api/University/GetUniversities
这很好用
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
{
[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();
}
}
}
答案 0 :(得分:2)
像MVC这样的Web API具有配置约定,因此,如果您未在属性中定义端点,它将起作用,但不会如您所愿。通常,Get方法的调用方式类似于此api / [ControllerName] post方法。
对于您而言,如果您需要为路线命名与操作名称相同,则可以在控制器上方编写此属性
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
User = get_user_model()
class UserAdmin(BaseUserAdmin):
fieldsets = (
(None, {'fields': ('phone_number', 'password')}),
('Bio', {'fields': ('first_name', 'last_name', 'address', 'birth_date')})
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('phone_number', 'password1', 'password2')
})
)
search_fields = ('phone_number', 'full_name')
list_display = ('phone_number', 'full_name', 'admin', 'staff', 'active')
list_filter = ('admin', 'staff', 'active')
ordering = ('phone_number',)
filter_horizontal = ()
admin.site.register(User, UserAdmin)
admin.site.unregister(Group)
答案 1 :(得分:1)
您只能使用[HttpGet]
[HttpGet]
public async Task<ServiceResult> GetUniversities()
{
return await universityService.GetUniversities();
}
然后将获取请求发送到http://localhost:5000/api/University。它将正常工作。 但是您的问题是您拥有多个不带参数的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();
}
否则,您必须将第二个移动到另一个控制器
答案 2 :(得分:0)
不需要通过Http Verb传递方法名称。您也可以这样使用:
[HttpGet]
public async Task<ServiceResult> GetUniversities()
{
return await universityService.GetUniversities();
}
但是您想更改方法名称或路由。您可以这样:
[HttpGet("", Name="Students"]
public async Task<ServiceResult> GetStudents()
{
return await universityService.GetStudents();
}
答案 3 :(得分:0)
您可以通过此方式使其自动化
C:\Windows\system32\cmd.exe