因此,我对netcoreapp
还是陌生的,并试图将旧的rest api转换为新的api。
问题在于我无法使用自定义方法的名称和参数。
我只想拥有[HttpGet]
或[HttpPost]
,然后拥有操作和参数。
例如
[HttpGet]
public List<string> GetStrings(string firstString, string lastString){
// my code here
}
然后我尝试调用它,这根本不起作用
baseUrl/controller/GetStrings?firstString=test&lastString=test2
请在下面查看我的控制器以了解我的问题
[ApiController]
[Route("api/[controller]")]
public class YoutubeController : ControllerBase, IYoutubeController
{
[HttpPost]
public async Task<YoutubeVideoInfo> GetVideoAsync(string videoId)
{
// my code
}
[HttpGet]
public List<YoutubeItem> Playlist([FromQuery]string playlistId)
{
// My code
}
[HttpGet]
public YoutubeVideoCollection Search(string searchString, int pageSize = 50, string relatedTo = null, VideoSearchType videoSearchType = VideoSearchType.Videos)
{
// my code
}
}
}
我尝试过这样的Calling Search,但是没有运气
https://localhost:44330/Youtube.Manager.Core.API/api/Youtube/Search?searchString=Eminem&pageSize=20&relatedTo=&videoSearchType=Videos
这是我的路由配置
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{controller=Home}/{action=Index}/{id?}"
);
});
我是否需要其他配置,也请不要在我的[HttpGet]
属性中指定太多内容。
在网络框架中,我有WebApiConfig
可以处理这种操作。
netcoreapp
中没有类似的东西吗?
答案 0 :(得分:1)
这样装饰您的控制器:
[ApiController]
[RoutePrefix("api/[controller]")]
public class YoutubeController : ControllerBase, IYoutubeController
{
[HttpPost, Route("GetVideoAsync")]
public async Task<YoutubeVideoInfo> GetVideoAsync(string videoId)
{
// my code
}
[HttpGet, Route("Playlist")]
public List<YoutubeItem> Playlist([FromQuery]string playlistId)
{
// My code
}
[HttpGet, Route("Search/{searchString}/{pageSize}/{relatedTo}/{videoSearchType}")]
public YoutubeVideoCollection Search(string searchString, int pageSize = 50, string relatedTo = null, VideoSearchType videoSearchType = VideoSearchType.Videos)
{
// my code
}
}
并在RouteConfig中添加以下行:
routes.MapMvcAttributeRoutes();
答案 1 :(得分:1)
要使操作名称成为路由的一部分,您需要更新[Route(..)]
属性以将操作考虑在内。您已在示例中使用了[controller]
令牌,因此只需添加[action]
:
[Route("api/[controller]/[action]")]
有关令牌替换的详细说明,请参见docs。