从不同的角度从Vuejs调用控制器动作

时间:2019-02-27 14:20:24

标签: c# asp.net-mvc vue.js

我有(topbar + sidebar + bottombar)作为Vuejs组件,它们是每个View中页面布局的一部分。 在顶部的vuejs文件中,我有一种通过API请求将“一些”数据加载到我的控制器之一的方法:

    beforeMount() {  
        this.loggedUserDeputies.userDeputies = [];
        console.log("calling LoadLoggedUserDeputies");
        $.get('api/Timesheets/LoadLoggedUserDeputies')
            .then(response => response as Promise<LoggedUserDeputies>)
            .then(data => {
                this.loggedUserDeputies = data;               
            });         
    },

API控制器方法:

    [Route("api/[controller]/[action]")]
    public object LoadLoggedUserDeputies()
    {
        if (ActualUserContract.LoggedUserDeputies == null)
        {
            return null;
        }

        var result = ActualUserContract.LoggedUserDeputies
             .ToList()
             .Select(x => new
             {
                 userContractId = x.UserContract.Id,
                 userContractFullName = x.UserFullName,
                 userContractPersonalNumber = x.UserContract.PersonalNumber
             });
        return new { userDeputies = result };
    }

但是我有一个问题,用于获取数据的url总是根据我所在的当前视图进行修改。

(因此不必总是调用:https://localhost:44380/api/Timesheets/LoadLoggedUserDeputies 它将转换为:https://localhost:44380/Activities/api/Timesheets/LoadLoggedUserDeputieshttps://localhost:44380/Reports/api/Timesheets/LoadLoggedUserDeputies )。即使它是由相同的布局组件调用的(这对我来说是新的,对我的无知表示歉意)。

有什么办法可以始终从每个视图调用相同的URL:https://example.com/api/Timesheets/LoadLoggedUserDeputies吗?

1 个答案:

答案 0 :(得分:1)

您正在使用相对路径加载文件:

$.get('api/Timesheets/LoadLoggedUserDeputies')

您需要在其前面加一个斜杠以使其成为绝对路径

$.get('/api/Timesheets/LoadLoggedUserDeputies')

将从当前服务器加载。如果也要指定服务器:

$.get('https://example.com/api/Timesheets/LoadLoggedUserDeputies')