0

私の mvc4 プロジェクトでは、Global.asax で次のルーティングが定義されています。

routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

             routes.MapHttpRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

私のビュー(ホーム/インデックス)は以下のようなものです:

    <script type="text/javascript">

                    function find() {
                    var id = $('#prodId').val();
                       $.getJSON("api/Products/"+id,
                        function (data) {
                            alert(data.Name);
                         })
                    .fail(
                        function (jqXHR, textStatus, err) {
                            alert('error');
                        });
                    }    
    </javascript>

    <body>
             <div> 
                <label for="prodId">ID:</label> 
                <input type="text" id="prodId" size="5"/> 
                <input type="button" value="Search" onclick="findAll();" /> 
                <p id="product" /> 
            </div> 
    </body>

: を使用している場合は正常に動作しますhttp://localhost:1868/
が、次のように試した場合は機能しません:http://localhost:1868/Home/Index

私が間違っていることはありますか?または何かが足りない?

かなりの助け...

4

1 に答える 1

4

これは、URLとして使用api/Products/しているのに対し、である必要があるため/api/Productsです。主役がない/場合、ブラウザはパスが現在のパスから相対的であると想定します(たとえば/Home/Index/api/Products)。これが、から機能する理由http://localhost:1868/です。文字は、現在の/パスではなく、ホストを基準にして呼び出しを行うようにブラウザに指示します。

于 2012-08-13T07:40:51.213 に答える