4

这是我用来设置 api url 的代码:

var clientUrl = '@Url.RouteUrl("ApiControllerAction", new { httproute="", controller = "Client"})';

在我的 route.config 中,路线如下所示:

routes.MapHttpRoute(
            name: "ApiControllerAction",
            routeTemplate: "api/{controller}/{action}/{id}"
        );

我试图在我的控制器上执行的操作是:

[ActionName("clients")]
    public IQueryable<Client> GetClients(int id)
    {
        return Uow.Clients.GetClients(id);
    }

我在 javascript 中有一个函数试图访问这个 api,但我得到了 404:

var getClients = function (id) {
            return $.ajax(clientUrl + "/clients/" + id)
        };

当我调用 getClients(1) 时,url 试图点击是这样的:

localhost:12345/clients/1

而不是我预期的网址:

localhost:12345/api/client/clients/1

知道这是哪里出错了吗?我有这个在另一个项目中工作,不记得是否还有其他我应该做的事情。如果我检查 javascript clientUrl = ''.

4

2 回答 2

14

我遇到了这个答案How to create ASP.NET Web API Url? 这有帮助。

我在GitHub 上的答案的示例代码

您可以更改您的 @Url.RouteUrl 代码以包含操作名称和“ID”,这目前似乎不是您的操作路线可选的......这可能是它无法找到匹配项并返回空字符串的原因. 所以试试:

var clientUrl = '@Url.RouteUrl("ApiControllerAction", new { httproute="", controller = "Client", action = "clients" id=@... })';

注意。 id=@... })';最后......成为模型上的 var 或属性的任何 id 等等......

或者

您当然可以将 ID 设为可选,这也可以:

config.Routes.MapHttpRoute(
        name: "ApiControllerAction",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }

或者

您可能会发现避免使用操作更简洁......客户端可以住在自己的控制器中ClientsController,您可以使用路由和默认值路由到它:

routes.MapHttpRoute(
        name: "ApiControllerAction",
        routeTemplate: "api/client/clients/{id}",
        defaults: new { controller="Clients" }
    );

那么这应该会给你所需的响应:

var clientUrl = '@Url.RouteUrl("ApiControllerAction", new { httproute="", controller = "Clients" })';

//api/client/clients/

和...

var clientUrl = '@Url.RouteUrl("ApiControllerAction", new { httproute="", controller = "Clients", id=@... })';

//api/client/clients/x
于 2012-10-08T16:38:49.283 回答
0

尝试设置clientUrl如下:

var clientUrl = '@Url.RouteUrl("ApiControllerAction", new { httproute="", controller = "Client", action = "clients"})';

然后改变getClients这个:

var getClients = function (id) {
    return $.ajax(clientUrl + "/" + id)
};
于 2012-10-05T04:51:50.200 回答