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

那是因为您使用api/Products/的是 url,而它需要是/api/Products. 如果没有前导/字符,浏览器会假定路径是相对于当前路径的(例如/Home/Index/api/Products),这就是它从 . 开始工作的原因http://localhost:1868/。该/字符告诉浏览器进行相对于主机的调用,而不是当前路径。

于 2012-08-13T07:40:51.213 回答