4

APIURLを設定するために使用しているコードは次のとおりです。

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);
    }

このAPIをヒットしようとしているjavascriptの関数がありますが、404を取得しています:

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

getClients(1)を呼び出すと、URLがヒットしようとしています。

localhost:12345/clients/1

これの私の予想されるURLではなく:

localhost:12345/api/client/clients/1

これがどこで間違っているのか考えていますか?私はこれを別のプロジェクトで作業していましたが、他にやるべきことがあるかどうか思い出せません。javascriptを調べると、clientUrl=''です。

4

2 に答える 2

14

私はこの答えに出くわしましたASP.NETWebAPI URLを作成する方法は?助けになりました。

ここGitHubでの私の答えのサンプルコード

@ Url.RouteUrlコードを変更して、アクション名と、現在アクションルートではオプションではないように見える「ID」の両方を含めることができます...これが、一致するものが見つからず、空の文字列を返す理由である可能性があります。だから試してみてください:

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

NB。 id=@... })';最後に...idがモデルのvarまたはpropertyなどになります...

または

もちろん、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 に答える