C# 带有控制器操作名称的Web api路由前缀
我有一个asp.net core 3.1应用程序。在启动文件中,我有以下路径C# 带有控制器操作名称的Web api路由前缀,c#,jquery,ajax,asp.net-core,asp.net-core-webapi,C#,Jquery,Ajax,Asp.net Core,Asp.net Core Webapi,我有一个asp.net core 3.1应用程序。在启动文件中,我有以下路径 app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}",
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" });
endpoints.MapControllers();
endpoints.MapRazorPages();
});
我有带索引和详细信息视图的位置控制器
public class PositionController : Controller
{
private readonly IPositionRepository repository;
public Position Position { get; set; }
public PositionController(IPositionRepository repository)
{
this.repository = repository;
}
public IActionResult Index()
{
return View();
}
public async Task<IActionResult> Details(int id)
{
if (id < 0)
return View();
Position = await repository.FindPositionById(id);
if (Position == null)
return RedirectToAction("_NotFound");
return View(Position);
}
我可以为索引视图获取数据,但不能为详细信息视图获取数据。web api路由指向https://localhost:44356/Position/Details/1/api/positions/1/tasks 应该指出哪一点https://localhost:44356/api/positions/1/tasks. 原因是我使用以下路径获取索引视图的数据https://localhost:44356/api/positions/
我认为,问题与默认路线有关。索引视图不显示在url中,但详细信息视图显示在url中。试试看
function loadPositions() {
positions =
$('#positionsList').DataTable({
"ajax": {
"url": "/api/positions",
"type": "get",
"datatype": "json"
},...
使用你的代码,我重现了你的问题
只需在loadTaskGroups方法中删除ajax url中的/即可
以下是测试结果:
抱歉出错,详细信息视图指向。职位id=1[审核]欢迎!如果你有更正,就不要把它放在评论中。。建议改为编辑/更正问题文本。我从其他地方找到了答案,我有一个带有onclick事件处理程序的按钮,为了在此事件处理程序中引用我的api,我将“api/positions…”更改为“/api/positions…”。这帮我解决了我的问题。无论如何,谢谢你的帮助。
function loadPositions() {
positions =
$('#positionsList').DataTable({
"ajax": {
"url": "api/positions",
"type": "get",
"datatype": "json"
},...
function loadTaskGroups(posId) {
taskGroups =
$('#taskGroups').DataTable({
"ajax": {
"url": `/api/positions/${posId}/tasks`,
"type": "get",
"datatype": "json"
},...
function loadPositions() {
positions =
$('#positionsList').DataTable({
"ajax": {
"url": "/api/positions",
"type": "get",
"datatype": "json"
},...
function loadTaskGroups(posId) {
taskGroups =
$('#taskGroups').DataTable({
"ajax": {
"url": `api/positions/${posId}/tasks`,
"type": "get",
"datatype": "json"
},...